C ++和C#之间的互操作

时间:2009-05-19 21:06:20

标签: c# c++ interop struct

我在C ++中有struct

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

并在C#中:

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

我作为COPYDATASTRUCT消息的一部分从非托管代码发送到托管代码。由于C#没有struct,C#端wchar_t的正确结构是什么?我已经尝试了字符串等,但当然会出现错误!

任何人都可以给我一些关于如何整理这个以及我对这些东西的新想法的想法吗?:

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

尝试System.Runtime.InteropServices.UnmanagedType LPTStrByValTStr

另请查看我对that question

的回答