Autor Beitrag
csharp2014
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72
Erhaltene Danke: 4


Delphi 11 Pro, C++ (VS 2019)
BeitragVerfasst: Do 04.12.14 09:13 
Hallo,

ich will mit WM_COPYDATA und COPYDATASTRUCT einen string senden.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 verlinkt auf COPYDATASTRUCT structure sowie Using Data Copy

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 arbeiten.
Die Seite pinvoke.net stellt hierfür eine guten Anlaufstelle dar. Unter COPYDATASTRUCT (Structures) findest du ein generelles Beispiel (in C#) dafür.

Die wichtigste Klasse für P/Invoke stellt Marshal dar.
Ich denke, du mußt dich erst darin einarbeiten. Such einfach mal nach "P/Invoke String"...