「C++学习笔记」动态链接库(Dll):C#调用C++的dll

    首先创建一个C++的dll,具体步骤,请参考我的:「C++学习笔记」动态链接库(Dll):创建与调试

1、创建C#控制台项目

     就在dll的目录下直接创建吧,添加一个名称为“CSharpUseDll”的C#控制台程序。

创建完成后,在 【解决方案平台】处下拉点击【配置管理器】

在【配置管理器】中,把该项目的平台选择为“X64”(与dll对应)。

如果没有“X64”平台,则新建即可,新建时,不要勾选“创建新的解决方案平台”(因为我这里其他项目已经有X64平台了,如果你是在其他目录,单独新建的C#项目,即解决方案下只有这个项目,就需要勾选!!!

2、 编码调用

C#调用C++的dll,其方法与C++自己动态调用是类似的。

在C#中,我们需要使用“DllImport()”方法。

代码如下:

using System;
//需要Runtime.InteropServices命名空间
using System.Runtime.InteropServices;

namespace CSharpUseDll
{
    class Program
    {
        //在xxx.dll中,找EntryPoint对应的函数,并对应到extern后的C#函数上。
        [DllImport(@"D:\code\CppDllDemo\x64\Debug\CppDllDemo.dll", EntryPoint = "Add", CallingConvention = CallingConvention.StdCall)]
        public static extern double Add(double a, double b);//可以重新命名函数,例如AddFunc(double a, double b)

        [DllImport(@"D:\code\CppDllDemo\x64\Debug\CppDllDemo.dll", EntryPoint = "SayHello", CallingConvention = CallingConvention.StdCall)]
        public static extern double SayHello();
        static void Main(string[] args)
        {
            double res = Add(4.5, 11.2);
            Console.WriteLine("{0}", res);
            SayHello();
            Console.ReadKey();
        }
    }
}

详细的请看代码中的注释

这里补充一点:

 CallingConvention = CallingConvention.StdCall  是指定函数的调用方式,StdCall是调用非托管的代码的默认方式,所以可以省略,C++创建的dll中,也没有明确指示,所以就是默认的了,如果需要,可以在创建dll时进行指定,例如:

//在C++创建的dll中, xxxDll.h文件下
//要外部调用的函数可以声明调用方式


CPPDLLDEMO_API double __stdcall Add(double a, double b);

CPPDLLDEMO_API void WINAPI SayHello();

//C++内部  : #define WINAPI  __stdcall  即这两个是等价的。

以上,运行C#控制台项目后,即

尾巴:别忘了

一样的,最终生成的C# exe程序与你调用的“dll”文件的路径关系!这里举例是写了绝对路径,实际开发中注意相对路径的拼接呦!

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值