C# 如何使用C++;C中的类实例# 我有一个DLL,它包含一个继承自另一个抽象C++类的类,定义如下: class PersonInterface { public: virtual int __stdcall GetName() = 0; }; [StructLayout( LayoutKind.Sequential )] public class PersonInterface { }
DLL导出一个可在C#中使用的函数,如下所示(以下方法是静态类C# 如何使用C++;C中的类实例# 我有一个DLL,它包含一个继承自另一个抽象C++类的类,定义如下: class PersonInterface { public: virtual int __stdcall GetName() = 0; }; [StructLayout( LayoutKind.Sequential )] public class PersonInterface { },c#,.net,c++,interop,C#,.net,C++,Interop,DLL导出一个可在C#中使用的函数,如下所示(以下方法是静态类PersonManager的一部分): 其中,PersonInterface在C#类中定义如下: class PersonInterface { public: virtual int __stdcall GetName() = 0; }; [StructLayout( LayoutKind.Sequential )] public class PersonInterface { } 我可以成功地检索C++类实例: Per
PersonManager
的一部分):
其中,PersonInterface
在C#类中定义如下:
class PersonInterface
{
public:
virtual int __stdcall GetName() = 0;
};
[StructLayout( LayoutKind.Sequential )]
public class PersonInterface
{
}
<>我可以成功地检索C++类实例:
PersonInterface person;
bool retrieved = PersonManager.GetPerson( out person );
但是,在调用GetName
方法之前,检索到的对象没有任何用处
为了能够在检索到的person对象上调用GetName
方法,还需要做些什么
string name = person.GetName();
<>你必须在C++中编写一个包装器(它可以被管理C++),在这里你调用C++的CLASess,并公开了一个扁平的DLL函数,这些函数可以从.NET调用,或者.NET类(如果你使用了托管C++),它将从.NET.< /P> < UL>访问。
public ref class
语法编写一个托管类,并将指针指向该类中的本机类。公开此托管类中的所有方法,并将所有调用转发到本机类/clr
标志编译少数源文件,而不是全部。将所有本机源文件编译为本机源文件。您的DLL将链接到VC运行时DLL以及.NET运行时DLL
托管类、/clr
、互操作性/编组(Marshalling)有很多,但至少要开始了
您可以从这不起作用,C#类!=C++类。你必须在C++ C++语言中编写包装器,或者通过C++来公开C++。最简单的解决方案是使用普通API创建一个简单的dll,可以使用dllimports从.Net调用该dll