在C#中调用C++编写的DLL(动态链接库)

在C#中调用C++编写的DLL:P/Invoke方案详解

在C#开发中,调用C++编写的动态链接库(DLL)是常见的需求,主要有两种方法:P/Invoke和C++/CLI。P/Invoke适用于调用非托管DLL(如纯C/C++生成的DLL),它需要手动声明函数签名,灵活性高但需注意平台一致性和调用约定。C++/CLI则适用于调用托管DLL(通过C++/CLI封装的DLL),代码更简洁但需额外创建中间层项目。本指南将重点介绍第一种方案——使用P/Invoke,提供完整的步骤和代码示例,确保格式清晰美观。

方法概述
  • P/Invoke:通过C#声明外部方法调用非托管DLL,需处理函数签名、平台一致性等细节。
  • C++/CLI:创建托管中间层项目,可直接在C#中添加引用,代码更简洁(本指南不展开)。

P/Invoke的核心优势在于直接控制底层调用,适合性能敏感场景。下面分步详解从创建C++ DLL到C#调用的完整流程。


使用P/Invoke详解

P/Invoke是C#调用非托管代码(如C++ DLL)的标准方式。它通过在C#代码中使用DllImport特性声明外部方法实现。以下是具体步骤,确保平台一致性(如x64)是关键。

步骤1: 创建C++ DLL项目
  1. 打开Visual Studio:启动VS,创建新项目。

    • 选择“动态链接库(DLL)”模板。

    • 在这里插入图片描述

    • 项目路径示例:D:\Gensen\TestDll\(仅供参考)。

    • 在这里插入图片描述

  2. 添加源文件

    • 在解决方案资源管理器中,右击“源文件”文件夹。
    • 选择“添加”->“新建项”,创建C++类文件(如FourArith.cpp)。
    • 在这里插入图片描述
    • 在这里插入图片描述
  3. 设置平台

    • 导航到菜单栏:生成->配置管理器。

    • 在这里插入图片描述
      在这里插入图片描述

    • 设置“活动解决方案平台”为x64(重要:确保与后续C#项目一致)。

    • 确认配置为Debug或Release(推荐Debug用于测试)。

步骤2: 编写C++代码

在C++文件中,添加四则运算函数。使用extern "C"防止C++编译器对函数名进行修饰(如?Add@@YANNN@Z),确保C#能通过函数名正确匹配。省略extern "C"需在C#中指定EntryPoint,但复杂易出错,不推荐。

代码示例(FourArith.cpp

#include "pch.h"
#include "FourArith.h"

extern "C" _declspec(dllexport) double Add(double a, double b);
extern "C" _declspec(dllexport) double Sub(double a, double b);
extern "C" _declspec(dllexport) double Multi(double a, double b);
extern "C" _declspec(dllexport) double Divi(double a, double b);

double Add(double a, double b) {
   
   
    return a 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值