
在C++项目中调用C#的DLL,需要将C#编译成DLL,再由C++进行调用。我最近遇到一个问题,需要在C++项目中使用SwfDotNet库,这是一个由C#编写的读写Swf文件的库,但如何让C++调用C#的DLL却让我费尽心思。
在尝试过程中,遇到了编译警告C4819,提示该文件包含不能在当前代码页中表示的字符,需要将文件保存为Unicode格式。这让我意识到自己对C++/CLI语法的理解还不透彻。
下面提供了一个简单的示例,创建一个C# DLL,代码如下:
namespace CSLib {
public class Class1 {
private string name;
public string Name {
get { return name; }
set { name = "Your Name: " + value; }
}
}}
在C++客户程序中,创建一个控制台应用,代码如下:
#using "..\debug\CSLib.dll"
using namespace CSLib;
int _tmain(int argc, _TCHAR* argv[]) {
Class1 ^c = gcnew Class1();
c->Name = "zzj";
printf("%s\n", c->Name);
return 0;
}
需要注意的是,要正确地引用C# DLL,应该使用#using而不是#include。我就是因为误用了后者,浪费了整整一个上午。另外,别忘了使用using namespace CSLib;以及使用C++/clr语法,采用正确的访问托管对象,即:使用帽子'^',而不是星星'*'。
通过这个简单的示例,我发现了解决问题的关键在于对C++/CLI语法的正确理解和应用。