虚拟代码说明:
foo.h中
[...]
[StructLayout(LayoutKind::Sequential)]
public value struct Bar
{
int in;
string str;
};
Foo(String^ string);
private:
Bar *bar;
Foo.cpp中
[...]
[DllImport("dummy")]
int _stdcall Baz(Bar *bar, [MarshalAs(UnmanagedType::LPStr)]String ^str);
Foo::Foo(String ^str)
{
bar = new Bar;
if (bar != nullptr)
{
if (!Baz(bar, str))
{
delete bar;
bar= nullptr;
}
}
}
偶尔会发生错误,当Baz被调用时,bar会为null,我认为这是因为它会在dll中运行的代码被执行时收集垃圾。
到目前为止,我已经尝试过阅读pin_ptr等,但是我找不到任何关于如何使用它的好资源,当我尝试将成员变量声明为pin_ptr类型时,我得到一个错误,说它不能成为班级成员。
我很失落,如果有人能告诉我如何修复它,为什么需要修复以及修复工作如何,那就太棒了。
编辑: 更多信息; Baz只是众多导入的dll方法之一,几乎每一个都使用相同的参数,这意味着第一个是Bar * bar,后面是传递给包装函数的其他参数。