我最近一直在COM互操作方面工作。阅读一些关于它的好书C ++ / CLI in Action作者:Nishant Shivakumar。我还通过Srinivas浏览了这个链接,其中他精美地解释了如何使用C ++ / CLI在本地C ++中使用C#库。我下载了页面底部的代码。阅读它...并且喜欢它。我的申请基于它。我在那个例子中有一个问题(你可以在那里下载)。 在C#Library“Worker.cs”中,如果我在Worker类中有一个方法,其签名类似于::
public void GetStudent(ManagedStudent student,int ){....}
FYI ::我需要object参数,因为我将在Worker类中访问该类的方法。
在C ++ / CLI包装器项目NativeInterface.h中,我想导出一个方法,该方法将此托管对象作为参数与示例不同。
__declspec dllexport void GetStudent(ManagedStudent^ obj)
C ++ / CLI中对象的等价物是什么?
后来我想通过在我的本机Win32应用程序/ DLL中传递一个对象来导入此方法来访问此方法。 我在我的原生dll / App中包含了“NativeInterface.h”文件。但是在构建dll / App时出现错误.. 托管目标代码需要\ clr选项。
FYI :: 1.我的WIN32 dll / app正在编译时没有\ clr支持和我的包装器\ clr支持 2.我认为错误是因为用作参数的句柄?我想在本机app / dll中访问UnmanagedStudent(Object obj); 这可能吗
答案 0 :(得分:0)
这是可能的,但你不能将.NET对象传递给本机DLL,这是一个本机C ++代码...... 原生C ++中.NET对象的等价物是C ++对象......但这就像要求C#理解Native或PHP,或者.... 所以,有几种方法。
不要使用C ++托管包装器。而是使用Marsahling和C#互操作性直接调用本机C ++,有两种方式之一:
使用C ++ Interop(你正在做的......)。你需要用混合模式编译!看到这个很好的例子: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/f2de75c5-50a6-41ac-9ddf-694a8c0ce75b/ 但是......你需要了解基础知识并知道如何编译它: http://msdn.microsoft.com/en-us/library/x0w2664k.aspx
互操作性是一个复杂的问题......我试着写一个简短的答案,请转回给我进一步澄清....