一、新建一个C#类,生成DLL文件
//-----CSharpDLL---
class CSharpDLL{
CSharpDLL(){
}
~CSharpDLL(){
}
void Add(){
}
}
//-----
二、创建一个新C++类调用C# DLL,并重新生成DLL供C++调用,
(项目属性设置成支持公共语言运行时支持(/clr))
//TESTWRAPPERAPI_EXPORTS 需要添加到工程“预处理定义”里面
#ifdef TESTWRAPPER_API_EXPORTS
#define TESTWRAPPER_API __declspec(dllexport)
#else
#define TESTWRAPPER_API __declspec(dllimport)
#endif
#include <iostream>
#include <msclr/auto_gcroot.h>
using namespace System;
using namespace System::Reflection;
class TestWrapperPrivate
{
public:
msclr::auto_gcroot<CSharpDLL^> csharp;
};
class TESTWRAPPER_API TestWrapper
{
public:
TestWrapper(){
_test = new TestWrapperPrivate();
_test->csharp = gcnew CSharpDLL();
}
~TestWrapper(){
delete _test;
}
void Add(){
_test->csharp->Add();
}
private:
TestWrapperPrivate* _test = nullptr;
};
三、注意按照以下方式使用,在调用delete csharp时 会存在资源释放异常heap corruption detected
class TESTWRAPPER_API TestWrapper
{
public:
TestWrapper(){
csharp = gcnew CSharpDLL();
}
~TestWrapper(){
delete csharp ;
}
void Add(){
csharp->Add();
}
private:
msclr::auto_gcroot<CSharpDLL^> csharp;
};