**unmanaged class**
這也是非託管類的聲明調用C++ DLL從C#
#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.Now如何在C#項目中使用它的一個項目
該片段非常不完整。 Mclass必須聲明爲「public ref class」,以便在程序集外可見。你*必須*實現一個終結器,所以當客戶端代碼不調用Dispose()時你不會泄漏內存。你的native()方法應該檢查* obj *是否沒有被刪除。 – 2012-02-09 13:11:44
@HansPassant:你的幫助是高度讚賞....將嘗試發佈完整的片段在未來的清晰.... – 2012-02-09 14:25:02
關鍵是要做*現在*,而不是下一次。 – 2012-02-09 14:38:48