C++打包DLL在C#中调用

很多时候我们都会遇到不同语言相互调用的情况,如在C#中调用C++的代码。

新建C++项目
在VS中新建C++Win32控制台应用程序,命名为ExportDllTest。
选择DLL和导出符号两个选项
新建完成后会出现ExportDLLTest.h和ExportDllTest.cpp两个文件,在ExportDllTest.h中我们可以声明需要导出的dll中包含的函数,在ExportDllTest.cpp中进行实现。
删除ExportDllTest.h中原有代码片段,输入如下代码

#define EXPORTDLLTEST_API __declspec(dllexport)
EXTERN_C EXPORTDLLTEST_API int __stdcall Add(int a, int b);
//可以不用宏定义,直接将EXPORTDLLTEST_API替换为__declspec(dllexport)
//EXTERN_C也可替换为 extern "C"

在ExportDllTest.cpp中对Add函数进行实现

#include "stdafx.h"
#include "ExportDllTest.h"
EXPORTDLLTEST_API int __stdcall Add(int a, int b)
{
    return a + b;
}

配置项目属性

点击项目选项,选择项目项目属性
在C/C++选项的高级设置中,设置编译为C++代码
平台根据自己所需设置
编译打包dll文件
设置完成后进行项目生成,编译(必须先生成项目再编译才能成功,否则无法获得dll文件)
至此可以在该项目所在的文件夹中找到编译得到的dll文件。
该部分选择的是release的64位版本进行编译得到的结果
新建C#项目
新建C#的控制台应用程序,命名为ImportDllTest。
设置C++编译过程中对应平台。
因为上步选择的是64位平台,故此处选择X64
使用DLLImport导入dll包
输入如下代码,通过DLLImport引用dll中的函数

using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace ImportDllTest
{
    class Program
    {
        [DllImport("ExportDllTest.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "Add")]
        extern static int Add(int a, int b);
        static void Main(string[] args)
        {
            Console.WriteLine(Add(1, 2));
            Console.Read();
        }
    }
}

将C++的dll文件拷贝到C#的bin目录下,拷贝到相应的文件中,如x64平台下的Debug中或Release中。
将ExportDllTest.dll拷贝到release文件夹中

点击启动,得到运行结果。

得到Add函数的返回值3

此方法为静态调用dll文件的相关方法,关于动态调用dll的方法在后续进行更新,敬请期待。
在调用C++中dll文件函数时,需要了解C++和C#中数据类型的对应关系,然后将不同类型相互对应来调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值