C C#

2009-05-19 46 views
1
++和

互操作我有此struct在C++:C C#

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

和在C#:

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

其中我送爲COPYDATASTRUCT消息的一部分從非託管到託管代碼。由於C#沒有wchar_t,因此C#端的struct的正確構造是什麼?我試過字符串等,但當然錯誤出現!

任何人都可以給我有關如何封送這個的一些想法,以及我是新來這個東西?:

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

你會得到什麼樣的錯誤,當你使用字符串? – scottm 2009-05-19 21:21:18

+1

你應該檢查出http://stackoverflow.com/questions/188299/marshal-c-struct-array-into-c 所有的答案都在那裏。 :) – Randolpho 2009-05-19 21:22:03

+0

如果您只使用沒有編組部分的直線字符串,則會導致內存損壞。 – flavour404 2009-05-19 21:57:45

回答

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