我想将C#类的对象传递给C ++,并且在本机c ++代码中想要在该传递的对象上调用一些方法。
Public class MyClass{
{
bool IsThisValid()
{
IsValid(this);//Check the Native passing it this object
}
[DllImport("mylibraryinCpp.dll", EntryPoint="IsValid", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.StdCall) ]
static internal extern bool IsValid(object);
}//end of class
现在想要C ++代码来获取此对象并对其执行一些操作。 在本机C ++代码中,我的签名为
//Native C++ code mylibraryinCpp.dll
extern "C" __declspec(dllexport) BOOL __stdcall IsValid (VARIANT theObject)
{
((mscorlib::_object*)(thObject.pdispVal))->get_ToString(bstrStringVal);//AccessViolationException occurs here.
}
上面的代码大部分时间都在工作,但有时它会给出AccessViolationException,其他内存可能是损坏的消息。 我是新手,所以不确定这是将对象从C#传递给C ++的正确方法吗? 感谢您的任何建议
答案 0 :(得分:1)
垃圾收集器可以移动对象。通常,您只需将函数指针传递给本机代码 - 它可以通过JIT从.NET中的委托生成 - 这绝对有效。这称为反向P / Invoke。