C# 静态调用C++ 生成的dll,即非托管dll

2019-07-06  本文已影响0人  堆石成山

C++文集板块有一节《C++ 如何生成一个DLL动态链接库》已经讲述了,C++如何生成一个动态链接库CPPDLLDemo.dll,本节将讲述如何用C#来调用该CPPDLLDemo.dll.

1、为简单起见直接创建C# 控制台程序来调用该dll.


创建控制台程序

2、首先用DllImport的方式添加需要调用dll中的方法,所以需要事先知道dll中的方法与参数。
添加using:

using System.Runtime.InteropServices;

在类下一级添加调用dll的方法与参数:

//调用C++的dll,即非托管dll的加法
[DllImport("CPPDLLDemo.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
extern static int add(ref int a,ref int b);//注意C++函数原型为指针*x.*y的参数,这里需用ref,如果是返回值是指针就不需要
//调用C++的dll中的减法
[DllImport("CPPDLLDemo.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
extern static int sub(int a, int b);

3、在main中声明参数并调用方法

  static void Main(string[] args)
        {
            int a = 222;
            int b = 111;

            int resultAdd = add(ref a,ref b);
            int resultSub = sub(a,b);
            Console.WriteLine(a.ToString() + "+" + b.ToString() + "=" + resultAdd.ToString());
            Console.WriteLine(a.ToString() + "-" + b.ToString() + "=" + resultSub.ToString());
            Console.Read();
        }

4、运行得出结果:(注意要把C++的dll拷贝到该程序的根目录下)


运行结果
上一篇 下一篇

猜你喜欢

热点阅读