- 将C#编写的DLL文件放置在C++的可执行程序目录
- 代码中使用 #using引用C#编写的DLL文件
C# DLL实现代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestDLL
{
public class Test
{
public string demo()
{
return "OK";
}
}
}
c++调用代码:
#using "..\Release\TestDLL.dll" //此处使用 .\TestDLL.dl会报错,原因未知
using namespace TestDLL
......
......
......
MathTest ^a = gcnew MathTest();
String^ s=a->demo();
-
配置C++项目的属性配置:添加公共语言运行支持
-
问题总结
- 使用C++/clr语法,采用正确的方式访问托管对象,即:使用帽子“^”,而不是“*”
- C#返回值为int或者bool等c#和c++都支持的类型时,可以直接使用,若C#返回值为C#中的string时,c++接收字符串需要用System::String,然后将String转换为c++支持的char*或者CString
具体实现如下:
MathTest ^a = gcnew MathTest();
System::String^ s=a->demo();
CString str1;
using namespace Runtime::InteropServices;
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
str1.Format("%s",chars);
Marshal::FreeHGlobal(IntPtr((void*)chars));