c# - 将纯C#对象传递给C++并在该对象上调用方法

原文 标签 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++的正确方法吗?
感谢您的任何建议

最佳答案

该对象可以由垃圾收集器移动。通常,您只需要传递一个指向本机代码的函数指针即可(它可以通过JIT从.NET中的委托(delegate)中生成),这肯定可以工作。这称为反向P /调用。

相关文章:

c# - 按位归零在结构构造中意味着什么?

c# - C#WPF文本框显示double.PositiveInfinity作为符号而不是Win10中的文本

c++ - 在.h中声明STL数据结构,例如vector

java - 调用Java方法,该方法期望将类作为Clojure中的参数

plugins - MEF是否足够成熟,可以押宝公司?

c# - 将linq查询转换为ObservableCollection

c# - 在C#中向多维数组添加维

c++ - 为什么通过string.h访问C++字符串类有效?

c++ - `const`ness,引用和函数调用

c# - WPF的InteropBitmap与GDI +:高CPU使用率