一、新建一个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;
};
本文介绍如何从C#生成DLL,并在C++中调用该DLL,包括C#类的创建、C++项目的配置以及跨语言调用的注意事项。演示了通过使用msclr命名空间和auto_gcroot智能指针来管理和调用C#对象的方法。
912

被折叠的 条评论
为什么被折叠?



