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

时间:2011-07-24 14:36:46

标签: c# c++ interop

我想将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 ++的正确方法吗?     感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

垃圾收集器可以移动对象。通常,您只需将函数指针传递给本机代码 - 它可以通过JIT从.NET中的委托生成 - 这绝对有效。这称为反向P / Invoke。

相关问题