Archive for the ‘C#’ Category.

Skype Onlinestatus mit C# setzen

Eric Wroolie zeigt in seinem Blogeintrag unter , wie man per Powershell den Onlinestatus setzt (Hinweis: Das Skype COM Add-In muss wohl nicht extra registriert werden, Skype installiert es schon mit). Seine Lösung funktioniert auch sehr gut, aus Interesse und praktischem Anlass wollte ich aber eine kleine Exe haben, die das Setzen des Status übernimmt. Folgender C# Code macht schon genau das, was er soll, Exception-Handling etc. fehlt aber noch.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SKYPE4COMLib;
 
namespace COM_Testapplication
{
    class Program
    {
        public static Skype skype = new Skype();
        static void Main(string[] args)
        {
            User currentUser = skype.get_User();
            skype.ChangeUserStatus(skype.Convert.TextToUserStatus("ONLINE"));
        }
    }
 
}

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

Hallo Welt mit iTextSharp

Heute habe ich mir mal die iTextsharp.dll von Sourceforge geladen, um aus C# heraus mal eine PDF Datei zu erzeugen. Im Visual Studio Projekt muss dann nur ein Verweis auf diese DLL erstellt werden, dann sollte das folgende Beispiel problemlos laufen. Ausgehend von diesem Beispiel werde ich mal schauen, ob man das nicht für was Sinnvolles einsetzen kann.
Ist sicher kein Ersatz für LaTeX, ein paar Dinge könnte ich mir jedoch vorstellen… 🙂

using System.IO;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Document pdfDocument = new Document();
            PdfWriter.GetInstance(pdfDocument, new FileStream("C:\\hallo.PDF", FileMode.Create));
            pdfDocument.Open();
            pdfDocument.Add(new Paragraph("Ich bin ein Absatz"));
            pdfDocument.Close();
        }
    }
}

Auch aus Powershell heraus lässt sich iTextsharp nutzen: http://www.powershell.nu/2009/09/08/scripting-pdf-documents-through-powershell/

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

Taglib und C# – Teil 2

Vor einer Weile hatte ich schon einmal beschrieben, wie man mit Powershell und der Taglib Bibliothek auf MP3 Metadaten zugreifen kann (http://uweziegenhagen.de/?p=732). Erneutes Googeln hat heut morgen eine Umsetzung der Bibliothek für C# und Mono gebracht.

Werd mal testen, ob ich das Projekt mit Visual Studio Express 2010 übersetzen kann.

Nachtrag vom 23.09.2010: Übersetzung hat nicht funktioniert, werde wohl weiterhin mit der fertigen DLL arbeiten.

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

NUnit mit C# 2010 verwenden

Ausgehend von einem einfachen Konsolenprogramm hier mal ein How-To für die Nutzung von NUnit unter Visual Studio 2010.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
 
namespace ConsoleApplication1
{
    class Program 
    {
        public static int add(int a, int b) {
            return a + b;
        }
 
        static void Main(string[] args)
        {
            System.Console.WriteLine(add(10,10));
            System.Console.ReadLine(); 
        }
    }
}

Zuerst installiert man die NUnit Binaries von http://www.nunit.org/?p=download. Im nächsten Schritte fügt man die Referenz zum Nunit Framework zum Projekt hinzu. Nunit.Framework sollte bei den Referenzen unter .Net auftauchen.

Dann wird die entsprechende „using Nunit.Framework“ – Direktive in den Code eingetragen. Im nächsten Schritt fügen wir die Test-Klasse FunctionTests.cs hinzu, der unsere add() Funktion prüfen soll:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace NUnit.Tests
{
    [TestFixture]
    public class FunctionTests
    {
        [Test]
        public void add_test()
        {
            Assert.AreEqual(0, ConsoleApplication1.Program.add(100, 0));
        }
    }
}

Wenn das Projekt jetzt übersetzt wird können wir im Anschluss die generierte EXE in Nunit laden und den Test ausführen. In unserem Fall schlägt der Test fehl, da 100+0 nicht 0 ergeben.

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

CUDA mit Excel-Unterstützung

Die kommende Version 3.1 von Nvidias Programmierbibliothek CUDA kommt mit Excel-Unterstützung. Sobald ich Excel 2010 habe, werde ich mir das mal genauer anschauen.

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

Mit C# Bilder aus einer Datenbank lesen

Heute hatte ich die Aufgabe, mal Bilder binär in eine Datenbank zu übertragen, was mit dem bulk Feature des SQL Servers auch recht gut klappt, sofern man den Dateipfad richtig angibt. Liegen die Dateien nicht auf dem Datenbank-Server, so sind UNC-Pfade zu verwenden.

-- Erstelle Tabelle
CREATE TABLE [dbo].[Bilder](
	[ID] [INT] NULL,
	[ID2] [INT] NULL,
	[DATA] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
-- Füge Bild ein
INSERT INTO Bilder 
VALUES (1,2,(SELECT binary_data 
FROM OPENROWSET(Bulk 'c:/test.jpg', SINGLE_BLOB) 
AS F(binary_data)))

Für das Testen des Uploads habe ich dann bei http://support.microsoft.com/kb/317701 entsprechenden Code gefunden, den ich innerhalb von fünf Minuten am Laufen hatte und der auf Knopf-Druck das Bild aus der Datenbank in eine Picturebox liest. Mission accomplished 😉

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

DLLs mit C# und Powershell – III

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

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

DLLs mit C# und Powershell – II

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();
 
        }
    }
}

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

DLLs mit C# und Powershell – I

Hier eine kurze 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.

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website

DLLs erstellen mit C#

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.

Uwe

Uwe Ziegenhagen has been working with LaTeX for more than a decade. Besides TeX/LaTeX he likes to work with Python, Rasberry/Arduino and his digital camera.

More Posts - Website