从c#调用c ++ dll

时间:2012-02-09 12:01:55

标签: c# c++ c++-cli

**unmanaged class**

这是非托管类声明

#ifdef EXPORT_CLASS
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
public class DLL_EXPORT cppclass
{
private:
string x;
public:
cppclass();
~cppclass();
string native();
};


**UNMANAGED CLASS DEFINITION**

这是非托管类定义

 cppclass::cppclass()
{
x="hello";
};
cppclass::~cppclass()
{
};
string cppclass::native()
{
return x;
};

**MANAGED CLASS**

这是托管类声明

public __gc class Mclass
{
//private:
public:
cppclass * obj;
public:
Mclass();
~Mclass();
string native();

};

**MANAGED CLASS DEFINITION**

//这是托管类定义

#include"managed.h"
Mclass::Mclass()
{
    obj=new cppclass();
};
Mclass::~Mclass()
{
    delete obj;
};
string Mclass::native() 
{
return  obj->native();
};

所有这四个文件都在一个项目中,它被制作成一个dll。现在如何在一个c#项目中使用它

2 个答案:

答案 0 :(得分:5)

在C#项目中添加对DLL的引用,并像使用任何.NET类型一样使用它。 可能你没有在DLL中找到任何导出的类型,因为这些必须是公开的。

编辑:BTW。我希望你说的是C ++ / CLI,而不是C ++ / CLI之前的Managed C ++。

答案 1 :(得分:1)

这一切都是灾难。这不是C ++ / CLI代码,它是旧的Managed Extensions for C ++,它们已被破坏。此外,从DLL导出本机类是一个非常糟糕的主意。将您的本机代码静态链接到托管类定义,创建一个DLL。