c/c++编写其他语言可以调用的dll


前面几篇文章 写的dll都是 c与c++互相调用 但是其他编程语言仍然还不可以调用

要想其他任意编程语言都可以调用 还需要 使用 def 文件来规范导出符号(导出的函数名字)


就要做三件事:

第一:加上__stdcall 使其可以让其他语言调用

第二:使用def文件来规范导出符号(函数名)

第三:如果是c++ 投文件里的函数声明使用extern "C"{}括起来,使其按C语言的函数名方式导出

示例:

function.h内容:

#pragma once
extern "C"{ //按照C的文件名格式来导出
	__declspec(dllexport) int __stdcall add1(int a, int b);
	__declspec(dllexport) int __stdcall add2(int a, int b);
}

function.cpp内容:

#include "function.h"
//  注意:头文件里 加了 __stdcall  源文件里的实现函数里也要加上,否则编译会报错
int __stdcall add1(int a, int b){
	return a + b;
}
int __stdcall add2(int a, int b){
	return a + b;
}

在源文件那里新建function.def文件 (里面第一行写EXPORTS 然后下面写导出的函数名 一行一个)

EXPORTS
	add1
	add2

然后在项目上右键>属性>配置属性>链接器>输入>模块定义文件 填写上function.def

image.png

然后重新生成的dll 就可以给任意语言调用了

当然编译的时候 不要忘记在  属性>常规>配置类型   选择动态库(DLL)