aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)

cdecl方式

新建vs  具有导出项的(DLL)动态链接库  工程

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第1张图片

 新建 add 方法的声明和实现

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第2张图片

 aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第3张图片

 改变 函数声明文件.h中的函数,以c函数的编译方法编译,否则用dll查看器查看可得到的函数名有其他字符,不能正常调用.

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第4张图片

#ifdef __cplusplus
extern "C" {
#endif

//你的函数声明

#ifdef __cplusplus
}
#endif

 新建 aardio 控制台工程

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第5张图片

 aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第6张图片

//以cdecl方式调用加载的dll
var dll=raw.loadDll($"C:\Users\Administrator\source\repos\TestDll2\Debug\TESTDLL2.dll",,"cdecl") 


/*第一种调用方式
*/
//var int1 = dll.add(3,4);

/*第二种调用方式
*/
add = dll.api("add","int(int, int)");
result = add(1, 2);

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第7张图片

 stdcall方式

新建vs  具有导出项的(DLL)动态链接库  工程 ,创建工程的方法和前一种一样

代码内容和上一个项目一样

声明和实现add方法

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第8张图片

 aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第9张图片

 这里不用加 extern "C"

在项目上右键 -> 属性 -> 

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第10张图片

 新建.def 文件

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第11张图片

 -> 添加新项

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第12张图片

 编写一下内容

LIBRARY "TESTDLL3"
EXPORTS
add

其中第一行指定最终生成的dll的文件名,不带.dll后缀

第二行为关键词

第三行及以下指定导出的方法名

最后生成.dll文件

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第13张图片

改动上一个aardio工程

aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第14张图片

 aardio 调用 vs 编写的dll (cdecl方式和stdcall方式)_第15张图片

参考

vs生成dll的学习 - aardio学习笔记-上位机开发

aardio调用dll - JavaShuo

你可能感兴趣的:(aardio,windows)