首页 > 其他分享 >aardio调用c语言dll动态库传结构体详细教程

aardio调用c语言dll动态库传结构体详细教程

时间:2024-02-29 23:15:46浏览次数:27  
标签:short aardio dll DLL 调用 库传 unsigned

安装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

相关文章

  • 微软 官方 .net 组件 下载 directx组件 下载 viual c++ 组件 下载 官方 修复DLL方
    下载.NETFramework|免费官方下载(microsoft.com).NETFramework是仅适用于Windows版本的.NET,用于生成客户端和服务器应用程序。升级应用在VisualStudio中单击几下即可将应用从.NETFramework升级到最新的.NET。  DownloadDirectXEnd-UserRuntimefromO......
  • C# 简单反射加载 DLL 实例
    //反射判断是否位某个类型publicboolIsSubclassOf(thisTypetype,TypebaseType){//如果type不是null并且baseType是一个类(非接口)if(type!=null&&baseType.IsClass){returntype.IsSubclassOf(baseType);}//或者如果baseType是......
  • 使用C#混淆加密大师保护你的代码 (代码混淆加壳工具,支持dll/exe混淆加密)
    C#混淆加密大师可以加密混淆C#编写的dll和exe程序(包括Winform程序,WPF程序,Unity游戏程序,控制台程序等),支持.NetFramework2.0~.NetFramework4.x,以及.NETCore2.0-.NET8。除了加密混淆代码功能,C#混淆加密大师还可以对EXE程序进行加壳,增加防篡改,注入垃圾数据等功能,可以......
  • C# vs2015 .dll模块联合开发好的应用程序进行调试
    C#vs2015.dll模块联合开发好的应用程序进行调试右键项目->属性,1.点击“调试”侧边菜单,在“启动操作”选项中选择“启动外部程序”,然后选择应用程序的exe文件的路径2.点击“生成”侧边菜单,在“输出”选项中“输出路径”中选择将当前调试项目的最新dll文件(最新的代码)输出到应用......
  • C# 引用DLL调用时注释无法显示
    C#引用DLL调用时注释无法显示修改前,调用DLL中的方法没有注释:修改后,调用DLL中的方法有注释:解决办法:在生成DLL时,将项目属性的生成页面中,勾选“XML文档文件”使用时,需要将XML文件和DLL文件放在同一目录下转载:https://www.cnblogs.com/KingKwon/p/7419508.html......
  • 无法加载DLL“xxxx”:找不到指定的模块
    以前的一个c#项目,今天运行的时候突然发现调用DLL时出现了下面的错误。心中很诧异,明明以前能用的,今天怎么报错了。代码没有修改,也不存在DLL路径错误的问题。后来看到有网友说用depends这个软件可以对DLL文件进行分析,就拿来一试。果然找到了问题。是以前编译器调用的库和现在编......
  • DLL文件及导入库
    Windows以函数的形式为应用提供了各种功能。这些形式的函数称为API(ApplicationProgrammingInterface,应用程序接口)。例如,Sample1.c中调用的MessageBox(),它并不是C语言的标准函数,而是Windows提供的API的一种。MessageBox()了显示消息框的功能。Windows中,API的目标文件,并......
  • aardio ide 字体 及设置
    需求aardioide只支持一个字体,英文字体肯定是Fira但是中文字体不好,所以只好将两个字体合并上使用。有教程。但是我发现已经有合并好的,就拿来使用吧放到fonts目录里面代码importide;ide.setConfig("editor_font_name","FiraFZHMedium");资料教程完美字体合并教程/中......
  • NSSM - 将exe,dll,jar封装成windows服务的神器
    NSSM(theNon-SuckingServiceManager)是Windows环境下一款免安装的服务管理软件,它可以将应用封装成服务,即将普通exe程序或者dll或者jar包应用,封装成服务使之像windows服务可以设置自动启动等。并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能。Installingf......
  • 使用 Visual Studio 断点调试 DLL
    继上文说到使用IDA和WinDbg调试无dmp文件  那么在有源码的情况下可以直接断点调试DLL,目的是查看DLL内部的函数调用场景:程序执行到某个DLL时突然崩溃,先确定Debug生成的DLL在程序中运行是否也会有闪退如果有,则适用于VS断点调试操作步骤:在Debug下生成一......