DLLs mit C# und Powershell – III

5. Februar 2010

Nachdem das Erstellen der DLL und der Test erfolgreich waren, können wir jetzt die DLL auch aus Powershell heraus aufrufen:

[Reflection.Assembly]::LoadFile("C:\simpledll.dll")
 
[de.uweziegenhagen.TextCompare]::levenshtein("Andrea", "Andria")

Die Ausgabe bringt zuerst ein paar allgemeine Informationen zur geladenen DLL, dann die Ausgabe der Funktion.

GAC    Version        Location
---    -------        --------
False  v2.0.50727     C:\Users\Uwe\Desktop\csharp-dll\simpledll\simpledll\bin\Re...
1

DLLs mit C# und Powershell – II

5. Februar 2010

Als nächstes schreibe ich eine kleine Konsolenanwendung, mit deren Hilfe ich die DLL testen kann. Als Projekttyp nutze ich daher “Konsolenanwendung”. Im Projektmappenexplorer wird unter Verweisen ein neuer Verweis auf die DLL angelegt, dann folgt die Eingabe des Quellcodes:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using de.uweziegenhagen;
 
namespace Levenshtein_Test
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Console.WriteLine(TextCompare.levenshtein("uwe", "andreas"));
            Console.ReadLine();
 
        }
    }
}

DLLs mit C# und Powershell – I

5. Februar 2010

Hier eine kruze Anleitung, wie man mit C# eigene DLLs erstellt und diese von Powershell aus benutzt. Ich nutze die kostenlose Version von Visual Studio, Visual C# Express 2008. Als umzusetzender Algorithmus kommt Levenshtein zum Einsatz, über den ich öfter schon geschrieben habe, die Funktion stammt aus der englischen Wikipedia.

In VS lege ich ein neues Projekt vom Typ Klassenbibliothek an, als Namespace wähle ich “de.uweziegenhagen”. Das Projekt habe ich unter dem Namen “simpledll” abgespeichert, die “Class1″ Datei in TextCompare.cs umbenannt. Hier der Quelltext für die statische Klasse, wichtig ist, dass die Levenshtein Funktion “public static” ist, nicht “private” wie in der Wikiedia.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace de.uweziegenhagen
{
    public static class TextCompare
    {
 
        public static Int32 levenshtein(String a, String b)
        { // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#C.23
 
            if (string.IsNullOrEmpty(a))
            {
                if (!string.IsNullOrEmpty(b))
                {
                    return b.Length;
                }
                return 0;
            }
 
            if (string.IsNullOrEmpty(b))
            {
                if (!string.IsNullOrEmpty(a))
                {
                    return a.Length;
                }
                return 0;
            }
 
            Int32 cost;
            Int32[,] d = new int[a.Length + 1, b.Length + 1];
            Int32 min1;
            Int32 min2;
            Int32 min3;
 
            for (Int32 i = 0; i <= d.GetUpperBound(0); i += 1)
            {
                d[i, 0] = i;
            }
 
            for (Int32 i = 0; i <= d.GetUpperBound(1); i += 1)
            {
                d[0, i] = i;
            }
 
            for (Int32 i = 1; i <= d.GetUpperBound(0); i += 1)
            {
                for (Int32 j = 1; j <= d.GetUpperBound(1); j += 1)
                {
                    cost = Convert.ToInt32(!(a[i - 1] == b[j - 1]));
 
                    min1 = d[i - 1, j] + 1;
                    min2 = d[i, j - 1] + 1;
                    min3 = d[i - 1, j - 1] + cost;
                    d[i, j] = Math.Min(Math.Min(min1, min2), min3);
                }
            }
 
            return d[d.GetUpperBound(0), d.GetUpperBound(1)];
 
        }
    }
}

Das Übersetzen der DLL sollte problemlos funktionieren, die fertige DLL sollte im PRojektverzeichnis unter /bin/release liegen.

O2 Rechnungen mit Powershell herunterladen

31. Januar 2010

In der aktuellen c’t wird in einem Artikel beschrieben, wie man mittels Powershell die Rechnungen von O2 abholen kann. Hier der Link zum Skript: https://www.heise.de/ct/projekte/machmit/webautomatisieren/wiki/SkriptUebersicht.

Bumptop – 3D Desktop für Mac und Window

31. Januar 2010

Von Bumptop gibt es jetzt Version 1.0, ist ein recht interessantes Konzept:

DLLs erstellen mit C#

28. Januar 2010

Unter http://snippets.dzone.com/posts/show/3861 liegt eine kleine Anleitung, wie man mit C# DLLs erstellt und einbindet. Eine angepasste übersetzte Version des Artikels für C# Express 2008 werde ich in den nächsten Tagen mal fertigstellen.

LaTeX – Vortrag

28. Januar 2010

Für die Troisdorfer Linux Usergroup bereite ich momentan einen Vortrag vor, der ein paar Grundzüge von LaTeX vorstellen soll. Ist noch lange nicht fertig, in unregelmäßigen Abständen lege ich aber eine PDF-Version unter folgender URL ab: http://uweziegenhagen.de/troisdorf/Intro.pdf.

LuaTeX

28. Januar 2010

Mit LuaTeX gibt es ein LaTeX mit eingebauter Skriptsprache, was viele momentan recht mühsam zu programmierende Kontrukte in TeX/LaTeX erleichtern dürfte. Unter http://www.luatex.de/2009/12/luatex-fur-den-latex-benutzer-eine-einfuehrung/ gibt es eine kurze Einführung in LuaTeX.

PDF reader für iPhone und iPod touch

27. Januar 2010

Goodreader, ein nach erstem Test ziemlich cooler PDF Reader für iPod und iPhone ist momentan für 0,79 € erhältlich. Für den Preis ein absolutes Muss.

Powershell und MP3 Tags

25. Januar 2010

Auf http://www.powershell.nu/2009/09/04/scripting-mp3-metadata-through-powershell/ habe ich heute einen interessanten Artikel gefunden, der das Auslesen von MP3-Tags mit Powershell beschreibt.

$TagLib = "C:\taglib\Libraries\taglib-sharp.dll"
 
[System.Reflection.Assembly]::LoadFile($TagLib)
 
$Media  =  [TagLib.File]::Create("C:/nemo.mp3")
 
$Media
 
$Media.Tag

GAC    Version        Location
---    -------        --------
False  v2.0.50727     C:\taglib\Libraries\taglib-sharp.dll                                                                                                           

Tag                    : TagLib.NonContainer.Tag
Properties             : TagLib.Properties
TagTypesOnDisk         : Id3v1, Id3v2
TagTypes               : Id3v1, Id3v2
Name                   : C:/nemo.mp3
MimeType               : taglib/mp3
Tell                   : 0
Length                 : 0
InvariantStartPosition : 644
InvariantEndPosition   : 6508416
Mode                   : Closed

GAC    Version        Location
---    -------        --------
False  v2.0.50727     C:\taglib\Libraries\taglib-sharp.dll                                                                                                           

Tag                    : TagLib.NonContainer.Tag
Properties             : TagLib.Properties
TagTypesOnDisk         : Id3v1, Id3v2
TagTypes               : Id3v1, Id3v2
Name                   : C:/nemo.mp3
MimeType               : taglib/mp3
Tell                   : 0
Length                 : 0
InvariantStartPosition : 644
InvariantEndPosition   : 6508416
Mode                   : Closed

StartTag                   : TagLib.NonContainer.StartTag
EndTag                     : TagLib.NonContainer.EndTag
TagTypes                   : Id3v1, Id3v2
Tags                       : {, }
Title                      : Nemo
Performers                 : {Nightwish}
PerformersSort             : {}
AlbumArtistsSort           : {}
AlbumArtists               : {}
Composers                  : {}
ComposersSort              : {}
TitleSort                  :
AlbumSort                  :
Album                      : Once
Comment                    :
Genres                     : {Other}
Year                       : 2004
Track                      : 0
TrackCount                 : 0
Disc                       : 0
DiscCount                  : 0
Lyrics                     :
Grouping                   :
BeatsPerMinute             : 0
Conductor                  :
Copyright                  :
MusicBrainzArtistId        :
MusicBrainzReleaseId       :
MusicBrainzReleaseArtistId :
MusicBrainzTrackId         :
MusicBrainzDiscId          :
MusicIpId                  :
AmazonId                   :
MusicBrainzReleaseStatus   :
MusicBrainzReleaseType     :
MusicBrainzReleaseCountry  :
Pictures                   : {}
IsEmpty                    : False
Artists                    : {Nightwish}
FirstArtist                : Nightwish
FirstAlbumArtist           :
FirstAlbumArtistSort       :
FirstPerformer             : Nightwish
FirstPerformerSort         :
FirstComposerSort          :
FirstComposer              :
FirstGenre                 : Other
JoinedArtists              : Nightwish
JoinedAlbumArtists         :
JoinedPerformers           : Nightwish
JoinedPerformersSort       :
JoinedComposers            :
JoinedGenres               : Other