【发布时间】:2011-09-01 21:02:06
【问题描述】:
我有一个具有以下定义的非托管代码,
void Load(const somestruct& structinst)
{
//dosomething.
}
我想将 CLI 中的结构作为 ref 传递给非托管代码中的此方法,并在 CLI 中取回该结构。
我尝试在 CLI 中创建一个结构为
[StructLayout(LayoutKind::Sequential, CharSet = CharSet::Ansi, Pack = 2)]
ref struct TEST
{
[MarshalAs(UnmanagedType::SysInt)]
int k;
};
并尝试将结构传递为
CLIWrapperClass::WrapperMethod()
{
TEST test;
this->NativeClassInstance->Load(test);
}
我收到类似error C2664: 'NativeClass::Load' : cannot convert parameter 1 from 'Namespace::WrapperClass::TEST' to 'NativeClass::somestruct&' 的错误
我将如何实现这一目标?
【问题讨论】:
-
有很多地方出了问题。 ref struct 是托管代码中的一个类。您不要在 C++/CLI 中使用封送处理属性,该语言旨在处理该问题。但真正的问题是您刚刚声明了一个与非托管类型不同的托管类型。编译器不喜欢这样。写一个真正的包装器。
标签: visual-studio-2008 c++-cli marshalling