Qt 调用 DLL功能函数

addfourliu 2011-11-08 02:32:50
在网上找了个Qt 调用 DLL功能函数的小例子,自己执行了下,加载.dll可以成功,但是dll里面的功能函数却不能调用,不知道为什么?有人遇到这种问题木有啊?
...全文
175 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
addfourliu 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dongdongnidenao 的回复:]

一般加载dll分为动态和静态两种。两种都需要有头文件,用于向被加载的程序说明都有什么可以使用的文件。就像一个清单一样。

动态加载如果在windows API中就需要用到LoadLibrary,GetProcAddress和FreeLibrary等一系列的函数了。LoadLibrary作用是加载dll,GetProcAddress作用是获取你知道名字的函数,FreeLibrary字面上就能理……
[/Quote]
谢谢解释啊,我搞错啦,我的函数忘了导出了,晕死。。。
dongdongnidenao 2011-11-08
  • 打赏
  • 举报
回复
一般加载dll分为动态和静态两种。两种都需要有头文件,用于向被加载的程序说明都有什么可以使用的文件。就像一个清单一样。

动态加载如果在windows API中就需要用到LoadLibrary,GetProcAddress和FreeLibrary等一系列的函数了。LoadLibrary作用是加载dll,GetProcAddress作用是获取你知道名字的函数,FreeLibrary字面上就能理解了,就是不需要Library的时候,释放掉。

静态加载不需要自己调用这些函数,这些函数的实际实现都在.lib文件中,这个与链接时候需要目标文件相同,有了它基本你要使用函数时候,调用就好了。

现在感觉你的函数是一个class的member function,会有name mangling。所以建议简单起见,用静态加载。

这些都是从windows API角度看的,我也是刚刚接触qt呵呵。
addfourliu 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dongdongnidenao 的回复:]

运行时错误了,应该是name mangling的问题,因为是C++的类的成员函数。要不你静态加载dll算了呵呵。
[/Quote]

弱弱的问一下,加载插件和动态加载dll有什么区别啊?静态加载dll又是怎么回事?
addfourliu 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wwwcs59 的回复:]

getString函数原型是什么?
[/Quote]
QString getString(){ return "OK";}
法尔我给他 2011-11-08
  • 打赏
  • 举报
回复
getString函数原型是什么?
dongdongnidenao 2011-11-08
  • 打赏
  • 举报
回复
运行时错误了,应该是name mangling的问题,因为是C++的类的成员函数。要不你静态加载dll算了呵呵。
addfourliu 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dongdongnidenao 的回复:]

Fun open = (Fun) mylib.resolve("getString");
这个是得到getString()的函数指针么?
如果是的话,看来函数指针没有获取成功啊。
[/Quote]
对啊,上面有定义:
typedef QString (*Fun)(); //定义函数指针,以备调用
是没有获取成功,不知道为啥?
dongdongnidenao 2011-11-08
  • 打赏
  • 举报
回复
Fun open = (Fun) mylib.resolve("getString");
这个是得到getString()的函数指针么?
如果是的话,看来函数指针没有获取成功啊。
addfourliu 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 loaden 的回复:]

不能调用的根据是什么?
没有理由这样。
[/Quote]
dll中有一个方法是getString(),
Fun open = (Fun) mylib.resolve("getString"); //援引 getString() 函数
if (open)
{
qDebug()<<"OK";
}
if判断进不去。。。
「已注销」 2011-11-08
  • 打赏
  • 举报
回复
不能调用的根据是什么?
没有理由这样。
内容概要:本文提出了一种面向通信优化的微电网分布式二次电压频率调控与功率均分方法,并通过Simulink平台进行了仿真实现。该方法针对孤岛微电网中多分布式电源的协同控制问题,采用分布式控制架构以减少对中央控制器的依赖,提升系统的可靠性与可扩展性。通过引入高效的通信机制与事件触发策略,在确保电压和频率快速精确恢复的同时,实现了各电源间有功与无功功率的均衡分配。文章详细阐述了控制算法的设计原理、稳定性分析过程以及关键参数的整定方法,并依托Simulink搭建完整的仿真模型,验证了所提方法在动态响应性能、抗干扰能力及通信资源利用率方面的优越性。; 适合人群:具备一定电力系统基础知识和仿真能力的研究生、科研人员及从事微电网、分布式能源系统相关工作的工程技术人员。; 使用场景及目标:①用于研究微电网中分布式电源的协调控制策略;②适用于需要实现电压频率恢复与负载功率均分的实际微电网系统设计;③为应对通信资源受限场景下的控制优化提供解决方案;④作为教学案例帮助理解分布式控制与二次调控机制。; 阅读建议:建议结合Simulink仿真模型同步学习,重点关注控制结构设计与参数整定部分,同时可延伸阅读文中提及的事件触发机制与弹性协同控制相关内容以加深理解。
内容概要:本文针对高比例清洁能源接入下的配电网重构问题,提出了一种融合需求响应机制的优化模型,并基于标准IEEE33节点系统进行仿真验证。研究通过引入需求响应策略,动态调节用户侧负荷,增强系统对风电、光伏等波动性可再生能源的消纳能力,同时结合网络拓扑重构以降低网损、改善电压分布,提升配电网运行的经济性与安全性。文中详细构建了计及辐射状约束、功率平衡与设备容量限制的混合整数非线性优化模型,采用智能优化算法求解开关操作序列与需求响应调度方案的协同最优解。通过Matlab编程实现仿真分析,验证了该方法在多重运行场景下的有效性与鲁棒性。; 适合人群:具备电力系统分析基础、熟悉Matlab编程工具,从事新能源并网、智能配电网优化、需求响应等领域研究的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于高渗透率分布式能源接入的配电网运行优化;②实现需求响应与网络重构的协同调度,提升系统灵活性与稳定性;③为智能配电网的规划、调度与决策支持提供技术参考与仿真平台。; 阅读建议:建议读者结合所提供的Matlab代码深入理解建模逻辑与算法实现流程,优先复现基础案例并逐步调整参数设置以探究不同需求响应强度、新能源出力波动等情景下的优化效果,亦可进一步扩展至多时段动态重构、储能协同优化等更复杂场景的研究。
内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制中的应用,旨在解决传统PID控制器在复杂动态水下环境中参数整定困难、适应性不足的问题。文章首先建立了AUV的动力学模型并分析了其在水下扰动环境中的运动特性,进而提出一种将QLearning算法与PID控制相结合的自适应优化策略。该方法通过构建合理的状态空间、动作空间及奖励函数,使控制器能够依据实时控制误差和外部干扰自主调整PID参数,从而提升系统的响应速度、稳定性和抗干扰能力。研究在Matlab平台上进行了仿真实验,涵盖了稳态、恒定扰动和随机扰动等多种工况,结果表明所提出的QLearning-PID控制器在各项性能指标上均优于传统PID控制,验证了其有效性与鲁棒性。; 适合人群:具备自动控制理论、机器人建模与强化学习基础知识,从事水下机器人控制、智能控制算法开发及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于提升AUV在复杂海洋环境下的轨迹跟踪精度与姿态控制性能;②为自适应控制策略与强化学习算法在实际工程系统中的深度融合提供技术参考与实现范例;③适用于智能控制器的设计、仿真验证、算法对比及优化研究。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解QLearning与PID融合的程序逻辑,重点关注状态设计、奖励函数构造与参数更新机制,并可通过修改环境扰动或控制目标进行拓展实验。

21,503

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧