2009-05-19 11 views
1

Ich habe diese struct in C++:Interop zwischen C++ und C#

struct TEXTMSGSTR 
{ 
    HWND Sender; 
    wchar_t Text[255]; 
    //wchar_t *Text; 
}; 

und in C#:

public struct TEXTMSGSTR 
{ 
    public IntPtr Sender; 
    public ? Text; 
} 

die ich als Teil einer COPYDATASTRUCT Nachricht an verwalteten Code von nicht verwalteten schicke. Was wäre der korrekte Aufbau des struct auf der C# -Seite, da C# wchar_t nicht hat? Ich habe versucht String usw. aber natürlich erscheinen Fehler!

Kann jemand mir ein paar Ideen, wie dies auch Marschall, wie ich dieses Zeug bin neu ?:

TEXTMSGSTR tx = (TEXTMSGSTR)Marshal.PtrToStructure(cds.lpData, typeof(TEXTMSGSTR)); 
+0

Welche Fehler Sie erhalten, wenn Sie Zeichenfolge verwenden? – scottm

+1

Sie sollten überprüfen http://StackOverflow.com/Questions/188299/Marshal-C-Struct-array-into-c Alle Ihre Antworten sind da. :) – Randolpho

+0

Wenn Sie nur gerade Zeichenfolge ohne den Marshalling-Teil verwenden, erhalten Sie eine Speicherbeschädigung. – flavour404

Antwort

2
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public struct TEXTMSGSTR 
{ 
    public IntPtr Sender; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] 
    public string Text; 
} 
+0

Danke Mehrdad, das hat super funktioniert. Ich muss wirklich die Artikel dazu lesen, es ist nicht einfach! Vielen Dank. – flavour404

Verwandte Themen