我在C#中使用托管GUI,在C ++中使用非托管DLL。我通过引用传递一个struct来填充它的DLL函数。 struct有几个wchar_t元素和几个字符串。
在DLL内部,所有数据在返回GUI之前看起来都很好。例如:struct1->ch1 = 0x1234;
struct1->ch2 = 0x5678;
struct1->ch3 = 'ab';
struct1->ch4 = 'cd';
但是当从DLL返回结构时,数据会出现乱码。
struct1->ch1 == 0x0034
struct1->ch2 == 0x0012
struct1->ch3 == 0x0078
struct1->ch4 == 0x0056
其他字符串元素返回正常。
正在填充的char数据是单个字节,所以我知道我可以使用BYTE类型,但我想知道这个。
我是托管/非管理关系的新手,所以我不确定发生了什么。任何想法?
答案 0 :(得分:0)
有几种选择。首先,您可以将整个结构标记为Unicode(因此chars
将被解释为wchar_t
):
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct MyStruct { ... }
或者,您可以使用16位int:
short ch1;
或者告诉编组人员明确使用每个项目:
[MarshalAs(UnmanagedType.U2)] char ch1;