我无法将非托管指针(存储为托管包装器中的成员)传递给需要双指针(指向存储的非托管指针的指针)的非托管函数。这个问题如下图所示:
我有一个下面声明的非托管 C 结构的包装器:
public ref class MyStructWrapper
{
private:
myStruct *_rto;
public:
MyStructWrapper()
{
_rto = new myStruct();
}
// read-only property
public property RTO{
myStruct * get(){return _rto;}
}
}
我需要从 C Dll 调用一个函数:
// alters data based on data in "SomeotherStructWrapper"(which consequently holds a
// SomeOtherStruct* ).
int SomeOtherStructWrapper::AlterMyStruct(myStructWrapper^ myObj)
{
// unmanaged function in C DLL
pin_ptr<myStruct> ptr = myObj->RTO;
AlterMyStructUnmanaged(&ptr,&someOtherStructStoredMemberPtr);
}
目标是更改 myObj->RTO 指向的数据...不幸的是,这会编译并运行并更改 ptr 后面的数据,但我需要在 myObj 中更改的实际数据不是。
编辑:
这是 SomeOtherStructWrapper 的实现:
public ref class SomeOtherStructWrapper
{
private:
otherStruct *_ots;
public:
MyStructWrapper()
{
_ots = new otherStruct();
}
int AlterMyStruct(MyStructWrapper ^rto);
}
}
AlterMyStructUnmanaged 的声明:
__declspec(dllexport) int AlterMyStructUnmanaged
(
MyStruct **Object,
otherStruct struct
);
在此先感谢您的帮助!