Übergabe von HWND an eine C-DLL von CSharp

09/03/2009 - 16:08 von Andreas Kneissl | Report spam
Hallo,

ich habe eine vorhandene DLL für TCP/IP- Kommunikation, die in C geschrieben
wurde. Ich suche nun eine Möglichkeit, diese von einer neuen C#- Apllikation
weiter verwenden zu können. In dieser DLL ist aber eine Funktion
WSAAsyncSelect(socket ,hWnd,WM_TCP_EVENT,FD_READ). hWnd ist der Handler (Typ
HWND) zum übergeordneten Fenster, dass die Netzwerkereignisse erhalten soll.
Kann ich von C# diese DLL weiterverwenden und, wenn ja, wie teile ich der
DLL den Handler von meinem Formblatt mit? Oder muß ich hier die TCP/IP-
Kommunikation neu entwickeln?
Vielen Dank für jede Hilfe.
Andreas
 

Lesen sie die antworten

#1 Günter Prossliner
09/03/2009 - 16:35 | Warnen spam
Hallo Andreas!

ich habe eine vorhandene DLL für TCP/IP- Kommunikation, die in C
geschrieben wurde. Ich suche nun eine Möglichkeit, diese von einer
neuen C#- Apllikation weiter verwenden zu können. In dieser DLL ist
aber eine Funktion WSAAsyncSelect(socket ,hWnd,WM_TCP_EVENT,FD_READ).
hWnd ist der Handler (Typ HWND) zum übergeordneten Fenster, dass die
Netzwerkereignisse erhalten soll. Kann ich von C# diese DLL
weiterverwenden und, wenn ja, wie teile ich der DLL den Handler von
meinem Formblatt mit?



Über das "Handle" Propery kannst Du auf das Window-Handle zugreifen.

Um eigene Nachrichten zu verarbeiten (WM_TCP_EVENT schaut wie eine einen
(WM_USER + xxx) Nachricht aus), musst Du die "WndProc" Methode
überschreiben, und mittels eines switch Statements Deine Nachrichten
filtern, und den Rest mittels 'base.WndProc(ref m)' an die
Standardverarbeitung weiterleiten.

vgl.

[Control.Handle Property (System.Windows.Forms)]
http://msdn.microsoft.com/en-us/lib...andle.aspx

[Control.WndProc Method (System.Windows.Forms)]
http://msdn.microsoft.com/en-us/lib...dproc.aspx

Oder muß ich hier die TCP/IP- Kommunikation neu
entwickeln?



Wenn diese C DLL kein spezifisches Protokoll implementiert (welches
eventuell komplex ist und somit der Aufwand ggf. zu hoch ist), sondern
lediglich die TCP Kommunikation ansich implementiert, würde ich das auf
jeden Fall rein im .NET Framework implementieren. Je nach Kompexitàt mittles
TcpClient oder "direkter" mittels Sockets. Das .NET Framework macht es
wirklich sehr einfach mit IP basierten Netzwerkprotokollen zu arbeiten. Da
ist es ggf. sogar mehr Aufwand die C DLL richtig einzubinden.

[TcpClient Class (System.Net.Sockets)]
http://msdn.microsoft.com/en-us/lib...lient.aspx

[Socket Class (System.Net.Sockets)]
http://msdn.microsoft.com/en-us/lib...ocket.aspx

[c# socket tutorial - Google-Suche]
http://www.google.at/search?q=c%23+socket+tutorial


Wenn Du das Protokoll ggf. neu definieren kannst, würde sich auch ein Blick
nach WCF anbieten, welches sehr flexibel ist, und bereits ausgeklügelte
Protokolle implementiert. Bei einem solchen Framework kümmert Dich i.d.R.
die Anwendung, und nicht das Protokoll.

[Getting Started Tutorial]
http://msdn.microsoft.com/en-us/lib...34712.aspx

[wcf tutorial - Google-Suche]
http://www.google.at/search?q=wcf+tutorial



OK?
mfg GP

Ähnliche fragen