wchar_t数据从非托管状态混乱到托管状态
wchar_t data being jumbled from unmanaged to managed
我在C#中有一个托管的GUI,在C++中有非托管的DLL。我通过引用填充结构的DLL函数来传递结构。该结构有几个wchart元素和几个字符串。
在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类型,但我想弄清楚这一点。
我是管理/非管理关系的新手,所以我不知道发生了什么。有什么想法吗?
有几个选项。首先,您可以使用将整个结构标记为Unicode(因此chars
将被解释为wchar_t
)
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct MyStruct { ... }
或者,您可以使用16位int:
short ch1;
或者告诉整理人员使用明确地执行每个项目
[MarshalAs(UnmanagedType.U2)] char ch1;
相关文章:
- 如何克服提升精神AST混乱
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- C++进程已终止,状态3混乱
- wchar_t数据从非托管状态混乱到托管状态