安装mingw32
下载安装配置
官方地址下载安装:https://sourceforge.net/projects/mingw/
安装方法:https://blog.csdn.net/HandsomeHong/article/details/120803368
↑记得最后要添加一下环境变量
mingw64 编译32位失败,待继续研究。https://zhuanlan.zhihu.com/p/413181676#
安装完成后用以下命令测试是否安装成功
gcc --version
g++ --version
用aardio测试范例程序
打开范例-调用其他语言-GCC-C++
用这个范例测试,注意去除 -municode 这个编译选项,即可成功。
-municode 这个选项与 Unicode(UTF-16) 宽字符相关,是VC++编译器的选项,若使用mingw就没有这个选项,处理宽字符用别宽字符类型。
↑个人建议C语言编写dll库时不使用宽字符,在外部调用的时候封装返回结果再使用宽字符中文。
C语言函数封装和编译
函数声明
编写可以被DLL导出,被其他程序调用的函数,使用宏来控制是否导出为可被外部调用的方法
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT
#endif
函数声明写法
DLL_EXPORT int hello();
DLL_EXPORT int connectCNC(char *str, unsigned short port, long timeout, unsigned short *FlibHndl );
编译运行和编译DLL库
gcc main.c -o myprogram -L. -lfwlib32; .\myprogram.exe
gcc main.c -o cpp.dll -DBUILD_DLL -L. -lfwlib32 -shared -s -m32 -O2 -static -lgcc -lstdc++ ;mv cpp.dll .\aardio窗体\ -force
结构体传参写法
根据API数据类型,按照对应的结构体传参,参考范例-调用其他语言-C语言-生成DLL
传字符串指针和short整型指针
C代码
int connectCNC(char *str, unsigned short port, long timeout, unsigned short *FlibHndl ){
return cnc_allclibhndl3( str, port, timeout, FlibHndl);
}
aardio 对应写法
//声明 指针用结构体/表
var pthndl = {
WORD x=666;
}
//传入结构体指针,接收返回值,和结构体数据
var ret,pthndl = dll.connectCNC(mainForm.edit2.text,tonumber(mainForm.edit3.text),10,pthndl)
console.log("返回值:",ret)
console.log("连接cnc获取句柄:",pthndl.x)
标签:short,aardio,dll,DLL,调用,库传,unsigned
From: https://www.cnblogs.com/handagou/p/18030469