C# 在c/CLI包装函数中将对象作为参数传递以导出到本机Win32 dll

C# 在c/CLI包装函数中将对象作为参数传递以导出到本机Win32 dll,c#,com,c++-cli,native,wrapper,C#,Com,C++ Cli,Native,Wrapper,我最近一直在从事COM互操作方面的工作。阅读Nishant Shivakumar的一些关于C++/CLI的好书。我还通过这个链接,通过他解释了如何使用C++ + CLI来消耗本地C++中的C语言库。我下载了页面底部的代码。读它。喜欢它。我的应用程序松散地基于它。在这个例子中,我有一个问题(你可以在那里下载)。 在C#Library“Worker.cs”中,如果Worker类中有一个签名如下的方法: public void GetStudent(ManagedStudent student,int

我最近一直在从事COM互操作方面的工作。阅读Nishant Shivakumar的一些关于C++/CLI的好书。我还通过这个链接,通过他解释了如何使用C++ + CLI来消耗本地C++中的C语言库。我下载了页面底部的代码。读它。喜欢它。我的应用程序松散地基于它。在这个例子中,我有一个问题(你可以在那里下载)。 在C#Library“Worker.cs”中,如果Worker类中有一个签名如下的方法:

public void GetStudent(ManagedStudent student,int ){....}
仅供参考:我需要object参数,因为我将从Worker类中的该类访问一个方法

在C++/CLI包装器项目NativeInterface.h中,我想导出一个方法,该方法将此托管对象作为参数,与示例不同

__declspec dllexport void GetStudent(ManagedStudent^ obj)
在C++/CLI中,对象的等价物是什么?

稍后,我想通过在本机Win32应用程序/DLL中传递对象来导入此方法来访问此方法。 我将“NativeInterface.h”文件包含在本机dll/App中。但是在构建dll/App时出错。托管目标代码需要\clr选项

供参考:: 1.正在编译我的WIN32 dll/应用程序,但不支持\clr,而我的包装程序支持\clr 2.我相信这个错误是因为句柄被用作参数?我想访问本机app/dll中的非托管学生(objectobj);
可能的是

是可能的,但是不能将.NET对象传递给本地的DLL,它是本地C++代码… 在本机C++中,.NET对象的等价物是C++对象…但这就像要求C#理解本机或PHP,或者。。。。 因此,有几种方法

< >不要使用C++管理的包装器。相反,使用MaSHHLIN和C互操作性直接调用本地C++,有以下1种方式:

将对象字段作为长参数列表传递给C++,并重新构造本机C++中的对象。有点“不好”的方法,但非常有效且易于调试 <> LI>也可以将对象作为C++指针的类指针直接传递,首先需要在C语言中创建正确的封送处理。请看这里:

使用C++互操作(你正在做……)。你需要用混合模式编译!看看这个好例子: 但是您需要了解基础知识并知道如何编译:


互操作性是一个复杂的问题。。。我试着写一个简短的回答,请回复我以进一步澄清……

您可以将ManagedStudent定义为COM对象,这样世界上支持COM的每种语言都可以非常自然地访问它。