将普通的c#对象传递给c++并调用该对象的方法

Pass plain C# object to C++ and call a method on that object

本文关键字:对象 c++ 方法 调用      更新时间:2023-10-16

我想把一个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++ ?谢谢你的建议

对象可能被垃圾回收器移动。通常,您只需将函数指针传递给本机代码——它可以通过JIT从。net中的委托生成——这绝对有效。这就是所谓的反向P/调用