Qt调用DLL动态库接口函数程序崩掉
来源:互联网 发布:淘宝店怎么描述店铺 编辑:程序博客网 时间:2024/06/05 04:40
工作中使用Qt开发,调用外部动态库.dll,在调用接口函数时总是运行之后崩掉,提示段错误!单步调试总有变量被意外改动,弄了两天在同事的帮助下解决!
方法如下:在定义接口函数指针时添加 _stdcall,它的缺陷是只能运行在windows平台,不能跨平台
typedef _stdcall int (*Func_WtDev_AxisCount)(int VehicleID);
问题解决!汗颜啊,学习之路漫长!
__stdcall
被这个关键字修饰的函数,其参数都是从右向左通过堆栈传递的(__fastcall 的前面部分由ecx,edx传), 函数调用在返回前要由被调用者清理堆栈。
并不是所有的语言都支持_cdcel调用规则,但是都支持_sdtcall调用规则, 假如你用VC做了一个DLL,导出了某些函数,如果你想这个DLL被其他语言也能调用的话,VB.DEPHI.PB..你的把他的调用约定声明为__stdcallwindows api都是_stdcall调用规则,
函数调用约定确定一个程序如何实现一个函数调用及参数如何传递。在单一语言程序中,调用约定几乎总是正确的,这是因为对所有模块总有一个缺省的约定并且头文件会负责调用和被调用程序之间的一致性。在一个混合语言程序中,不同的语言不可能分享同一个头文件。由于调用约定而产生的错误在编译时无法发现,直到程序在运行时(run-time)实现函数调用时才出现并会立即导致应用程序崩溃。 关键字 栈的维护者 参数传递 __cdecl 调用者 参数反序入栈(右-> 左) __stdcall 被调用者 参数反序入栈(右-> 左) __fastcall 被调用者 参数先存寄存器,接着入栈 thiscall(并非关键字) 被调用者 参数入栈,this指针存ECX 在C++中,可以在函数声明或定义时用关键字__stdcall指定调用约定。__stdcall调用约定经常在Windows程序或API函数中使用。在GUI程序中,PASCAL、WINAPI和CALLBACK都被定义为__stdcall。C语言的缺省调用约定为__cdecl。 __stdcall产生的名字修饰是将名字符号前加下划线(_),并且后加”@”和函数参数字节数(所需栈空间)
- Qt调用DLL动态库接口函数程序崩掉
- Qt调用DLL动态库接口函数程序崩掉
- 动态调用dll函数
- QT 调用动态库接口方法
- VS2015接口程序调用(静态链接库[.library],动态链接库[.dll])
- VC 动态调用DLL接口
- Qt将接口文件制作成dll动态链接库
- QT调用dll、外部程序调用QT的dll.md
- Qt中调用VC6生成的动态库DLL文件
- Qt中隐式调用VS建立的dll动态库
- QT动态链接库(DLL)的创建和调用
- MFC调用QT编写的DLL动态库
- 接口默认值引发Qt调用DLL异常
- 动态调用 DLL 中的函数
- j2ee通过jni接口调用动态链接库DLL
- BCB(C++ Builder)创建动态库(DLL,接口导出和调用),动态加载DLL
- 工厂方法-接口-动态调用DLL
- QT 调用 MFC 常规动态DLL mfc120ud.dll 崩溃
- 快速搭建ubuntu JavaWeb服务器环境(不需要下载任何软件包)
- 电子商务平台b2b2c Springmvc+mybatis
- NSOperation基本理解
- Spring MVC通过注解获取配置文件中的值
- 未能加载文件或程序集“K2CSC.DLL”或它的某一个依赖项。 不是有效的 Win32 应用程序。 (异常来自 HRESULT:0x800700C1)
- Qt调用DLL动态库接口函数程序崩掉
- 源码分析参考:Picklecompat
- 小程序html转wxml,微信小程序用wxParse解析html
- Spring--关于《Spring实战》中第5章SpringMVC中表单验证无效问题
- C#排序 How to Sort a List<T> by a property in the object
- 传智C++课程笔记-1
- 关于 char 、 wchar_t 、 TCHAR 、 _T() ||| 宏 _T 、 TEXT 、 _TEXT 、 L
- 关于爬虫IP代理以及日常维护
- 汇编小写字母转换大写字母