【发布时间】:2012-03-06 07:51:38
【问题描述】:
昨天发布一个问题后,我以为我已经解决了这个问题,但我仍然遇到问题,我有一个 C++ 类的 C++/CLI 包装器,C++ 类的一些函数将 recv 的缓冲区作为参数,数据包结构被定义为 C++ 结构,这就是作为参数的内容。
在 C# 中,我使用 structlayout 复制了这些 C++ 结构,因此我在 C# 中有等效的结构,它们在内存中的布局与我的 C++ 结构相同。在我的 C++/CLI 代码中,我尝试了以下操作
UINT GetValues(value class^ JPVals) // value class, as C# structs are value types
{
IntPtr ptr;
Marshal::StructureToPtr(JPVals,ptr,false);
return m_pComms->GetValues(ptr,0); // m_pComms is a wrapped unmanaged class
//GetValues takes a pointer to a C++ struct
}
我得到的错误是无法将参数 1 从 'System::IntPtr' 转换为 'SJPVal *',为什么不能从值类 Marshall 到 C++ 结构指针?在这种情况下,我应该传递什么以及我应该如何编组它?
【问题讨论】:
-
那么你应该接受昨天问题的答案。