前面几篇文章 写的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
然后重新生成的dll 就可以给任意语言调用了
当然编译的时候 不要忘记在 属性>常规>配置类型 选择动态库(DLL)