C C#

2009-05-19 38 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; 
}