C++如何调用C# DLL:CLI混合编程实战与避坑指南

Ada
Ada
发布时间:2026-10-13 | 1人浏览过
原创

在Windows环境下,若需在C++程序中调用C#编写的DLL,关键在于启用公共语言运行时(CLR)支持。该方法适用于希望复用现有.NET组件的场景。本文将简述C#类库的创建、C++控制台的配置,并重点解析常见的编译错误原因。

准备条件

操作环境需包含Visual Studio或支持CLI的编译器。C#项目类型必须为“类库”(Class Library),而非标准的控制台或窗体应用。C++项目需设置为支持“公共语言运行时支持”(/clr),通常称为C++/CLI模式。

具体操作步骤

第1步:创建C# DLL类库

目的:生成可供调用的托管程序集。
入口:新建C# Class Library项目。
动作:编写需要暴露给外部的类和方法。
关键参数:确保命名空间(namespace)正确。

namespace CSLib 
{
    public class Class1
    {
        private string name;
        
        public string Name
        {
            get { return name; }
            set { name = "Your Name: " + value; }
        }
    }
}

编译该工程,输出对应的CSLib.dll文件。

第2步:配置C++客户端程序

目的:构建能识别并调用.NET类型的应用。
入口:新建C++ 控制台应用程序(空项目即可)。
动作:引入C# DLL并实例化对象。

首先,使用 #using 指令引用DLL路径,而不是C/C++传统的 #include。随后声明命名空间,并使用托管类型语法。

#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;
}

完成判断与排错

成功标志是控制台打印出 Your Name: zzj。若在编译过程中遇到报错,请检查以下常见问题:

  • Warning C4819 或乱码:这通常源于源代码文件编码问题。请确保源码保存为 Unicode 格式(如 UTF-8 with BOM 或 UTF-16),以防止数据丢失或非ASCII字符解析错误。
  • 找不到标识符或编译失败:切勿对 .dll 文件使用 #include,必须使用 #using。
  • 指针错误:C++/CLI中管理堆上的托管对象应使用帽号 ^,解引用使用 ->,而非原生指针的星号 *。

简要总结

C++调用C# DLL的核心在于利用C++/CLI作为桥梁。只要遵循 #using 引用、正确的命名空间声明以及托管指针语法,即可无缝整合两者的优势。以上就是C++调用C# DLL程序实现的详细内容,更多关于C++与C#互操作的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表