一、C++类库与C#类库相互调用
1、C++调用C#类库
1.准备C#类库(dll文件)
1.1.创建C#类库:
右击项目类库生成即可,
出现.dll(类库)与.pdb(pdb文件包含了编译后程序指向源代码的位置信息,
用于调试的时候定位到源代码,主要是用来方便调试的)两个文件。
设置仅仅生成.dll类库,可以删除.pdb文件
1.准备C++类库(dll文件)
在VS2017中新建->项目->Visual C++->Windows桌面->动态链接库;
在项目属性中->常规中选择无公共语言支持,即不创建托管C++类库;
右键头文件---》添加---》新建项(添加.h头文件)
右键源文件---》添加---》新建项(添加.cpp源文件)
代码分别:
mydll.h:
#pragma once extern "C" _declspec(dllexport) int _stdcall add(int a,int b);
mydll.cpp:
#include "stdafx.h" #include "mydll.h" int _stdcall add(int a, int b) { return (a+b); }
然后右键解决方案---》重新生成解决方案(先选择Release)(已经生成动态库了)
此路径
c#调用
using System; using System.Runtime.InteropServices; namespace ConsoleAppTemp { class Program { [DllImport("DllTest.dll")] //DllImport 必须引用using System.Runtime.InteropServices; public static extern int add(int a, int b); //可以通过EntryPoint特性指定函数入口,然后为函数定义别名 [DllImport("HelloWorldLib.dll", EntryPoint = "add")] public static extern int CustomName(int a, int b); static void Main(string[] args) { int a = add(1, 2); Console.WriteLine("输出结果为:" + a.ToString()); //跟上面是一样的 int b = add(1, 2); Console.WriteLine("输出结果为:" + b.ToString()); Console.ReadKey(); } } }
打开前面C++库生成的目录,将HelloWorldLib.dll复制到C#工程的Debug目录下。
也可以不复制,只需在引用dll的时候写上完整路径就行了。这里我是直接复制到Debug目录下
点到为止