Entwickler-Ecke

Sonstiges (.NET) - WM_COPYDATA, COPYDATASTRUCT -> string


csharp2014 - Do 04.12.14 09:13
Titel: WM_COPYDATA, COPYDATASTRUCT -> string
Hallo,

ich will mit WM_COPYDATA und COPYDATASTRUCT einen string senden.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
[StructLayout(LayoutKind.Sequential)]
struct COPYDATASTRUCT
{
  public IntPtr dwData;
  public int cbData;
  public IntPtr lpData;
}

COPYDATASTRUCT cds = new COPYDATASTRUCT();

string s="Hallo Welt!";

cds.dwData = (IntPtr)0;
cds.cbData = ??? <- Stringlänge
cds.lpData = ??? <- String


Ein Beispiel wäre schön.

Danke und beste Grüße

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Th69 - Do 04.12.14 11:31

Hallo und :welcome:

für WINAPI Funktionen und Strukturen am besten immer direkt in der MSDN suchen:
WM_COPYDATA message [http://msdn.microsoft.com/en-us/library/windows/desktop/ms649011%28v=vs.85%29.aspx] verlinkt auf COPYDATASTRUCT structure [http://msdn.microsoft.com/en-us/library/windows/desktop/ms649010%28v=vs.85%29.aspx] sowie Using Data Copy [http://msdn.microsoft.com/en-us/library/windows/desktop/ms649009%28v=vs.85%29.aspx]

cbData gibt also die Größe der Daten an (d.h. die Länge des Strings) und lpData einen Zeiger auf den Anfang der Daten (d.h. den String selbst).

Da dies jedoch eine unmanaged (d.h. native) Funktion ist, mußt du von C# aus per P/Invoke [https://en.wikipedia.org/wiki/Platform_Invocation_Services] arbeiten.
Die Seite pinvoke.net [http://pinvoke.net/] stellt hierfür eine guten Anlaufstelle dar. Unter COPYDATASTRUCT (Structures) [http://pinvoke.net/default.aspx/Structures/COPYDATASTRUCT.html] findest du ein generelles Beispiel (in C#) dafür.

Die wichtigste Klasse für P/Invoke stellt Marshal [http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal%28v=vs.100%29.aspx] dar.
Ich denke, du mußt dich erst darin einarbeiten. Such einfach mal nach "P/Invoke String"...