社区
进程/线程/DLL
帖子详情
如何动态导入DLL中的类
happy1123
2008-01-21 12:33:25
我需要使用LoadLibrary来导入DLL,并使用DLL中的类。不知道怎么做。请高手指点。
...全文
903
5
打赏
收藏
如何动态导入DLL中的类
我需要使用LoadLibrary来导入DLL,并使用DLL中的类。不知道怎么做。请高手指点。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
stivenjia
2008-01-21
打赏
举报
回复
例如:
DWORD CreateA(A *lp)
{
lp = new A;
return 0;
}
之后你导出该类并调用它。
或者你使用类似COM的做法。
使用地址表
北方大冬瓜
2008-01-21
打赏
举报
回复
LoadLibrary("文件名")返回得到的模块句柄,可以加载一个动态连接库或exe文件。
GetProcAddress(Hinstance,lpname)用来获取指定的动态连接库函数的地址
Hinstance为由LoadLibrary返回的模块句柄,lpname为文件名/函数名,返回值,成功返回动态连接库的地址,失败返回NULL,
FreeLibrary(Hinstance),Hinstance为由LoadLibrary返回的模块句柄,功能是:释放动态连接库!
动态引入方式就是使用Windows的两个API即LoadLibrary和GetProcAddress,前者用于获得DLL的句柄,后者用于获得DLL中例程的地址,这种方式之所以被称为动态的,是因为它不需要在程序的开始处把要引入的例程全部列出,只要在调用前引入,并且LoadLibrary可以指定不同的DLL,GetProcAddress可以指定不同的例程,最重要的是如果指定的DLL出错,最多是API调用失败,但不会导致程序终止,因此我们应该在程序中监视DLL的返回值,根据返回值作出相应的处理。程序示例如下:
Var LibHandel:Thandlel;
LibHandle:=LoadLibrary(Pchar(DLLname));
以上首先声明一个DLL的句柄,然后用LoadLibrary获得DLL的句柄,其中DLLName是DLL的文件名,由于LoadLibrary是Windows的API,因此调用时要强制转换成Pchar类型。
Var Getcount:Function(Index:integer):Integer;StdCall;
@Getcount:=GetProcAddress(LibHandle,’’GetCount’’);
以上声明了一个例程指针,指向一个函数,有一个Integer类型的参数,返回类型也是Integer,调用约定是StdCall方式,然后用GetProcAddress获得DLL中GetCount例程的地址。
Var MyCount:Integer;
MyCount:=GetCount(1);
以上是调用DLL中例程GetCount的例子。
DLL只能输出例程,虽然DLL中也含有变量(全局变量),但程序不能直接引入这些变量,只能通过接口例程间接地访问这些变量。DLL也不能直接访问调用DLL的程序中的变量。
注意,不管那种方式,在编译期,编译器不检查DLL是否存在以及要引入的例程是否存在等问题,因此这类错误在编译期是检查不出来的。
进程调用 LoadLibrary(或 AfxLoadLibrary)以显式链接到 DLL。如果成功,函数将指定的 DLL 映射到调用进程的地址空间中并返回此 DLL 的句柄,该句柄可与用于显式链接的其他函数(如 GetProcAddress 和 FreeLibrary)一起使用。
LoadLibrary
LoadLibrary 尝试使用用于隐式链接的同一搜索序列来定位 DLL。如果系统无法找到 DLL 或者入口点函数返回 FALSE,LoadLibrary 将返回 NULL。如果对 LoadLibrary 的调用所指定的 DLL 模块已映射到调用进程的地址空间中,则函数仅返回 DLL 的句柄并递增模块的引用数。
如果 DLL 有入口点函数,则操作系统在调用 LoadLibrary 的进程上下文中调用此函数。如果由于以前调用了 LoadLibrary 但没有相应地调用 FreeLibrary 函数而导致 DLL 已经附加到进程,则不会调用此入口点函数。
加载扩展 DLL 的 MFC 应用程序应使用 AfxLoadLibrary 而不是 LoadLibrary。AfxLoadLibrary 在调用 LoadLibrary 之前处理线程同步。AfxLoadLibrary 的接口(函数原型)与 LoadLibrary 相同。
如果出于某种原因 Windows 无法加载 DLL,进程可以尝试从错误恢复。例如,进程可通知用户所发生的错误,并让用户指定 DLL 的其他路径。
安全说明 如果代码将在 Windows NT 4 或 Windows 2000 上运行,请务必要指定任何 DLL 的完整路径名。
ouyh12345
2008-01-21
打赏
举报
回复
不能动态加载
happy1123
2008-01-21
打赏
举报
回复
也就是说,肯定不能用loadlibrary加载类了?
jameshooo
2008-01-21
打赏
举报
回复
导出类只可用于隐式加载,不能使用LoadLibrary进行显示加载
TypeScript
类
型系统与全栈项目资源包
本资源包整理了TypeScript
类
型系统设计检查清单、前后端接口契约模板、全栈项目目录结构、tsconfig配置基线、CI质量门禁、JavaScript迁移到TypeScript计划和常见问题排查指南,适合前端开发、Node.js后端开发、全栈工程化学习和团队代码质量建设参考。内容为原创模板,不包含真实生产密钥、账号、内部仓库地址或敏感配置,可按项目实际技术栈调整。
轻量级物联网开源平台,6分钟快速部署,千万级设备承载、电信级稳定性 物模型-规则引擎-数据通道-组态页面全流程低代码开发、前后端完全开源、支持多行业工业协议
DGIOT是国内首款轻量级开源工业物联网平台,我们致力于提供五
类
物联网解决方案:国企/研究院:平台代码开源,无版权产权困扰,国产无“卡脖”之忧;系统集成商:通用设备海量接入、定制设备二次开发、6分钟一键式私有化快速部署,低成本(降90%成本);工业设备制造商:海量设备上线运维,不受公有云限制,低成本,短周期自建平台,私有化部署,数据安全;开源平台开发者:一键式开发环境,集成和兼容各种最优开源工具,快速承接物联网项目;垂直领域物联网平台:快速部署私有化平台,千万级承载,运营级底座,全开放扩展
单相逆变器闭环逆变电路PWM模型仿真研究(Simulink仿真实现)
内容概要:本文围绕“单相逆变器闭环逆变电路PWM模型仿真研究”展开,基于Simulink平台构建单相逆变器的闭环控制系统仿真模型,重点研究PWM调制技术在逆变电路
中
的应用与实现。文
中
详细阐述了系统架构设计、电压电流双闭环控制策略的实现原理、控制器参数设计及仿真建模全过程,并通过仿真结果验证了控制方案在
动态
响应、稳态精度与系统稳定性方面的有效性。同时,文档还涵盖多种电力电子系统典型应用场景,如多
类
型短路故障仿真(
中
性点不接地、经小电阻接地、经消弧线圈接地等)、软开关技术、微电网能量管理、MPPT控制等,体现出较强的技术综合性和工程实践价值。; 适合人群:电气工程、自动化、电力电子与新能源等相关专业的高校本科生、研究生、科研人员,以及从事电力系统仿真、逆变器设计与新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的单相逆变器闭环控制系统建模与PWM仿真方法;②深入理解双闭环控制、SPWM/SVPWM调制、系统稳定性分析等核心技术原理;③为课程设计、毕业设计、科研项目或实际工程开发提供可复用的仿真模型与技术支持; 阅读建议:建议结合文
中
仿真模型动手实践,重点掌握PI控制器参数整定、PWM信号生成机制与仿真结果分析方法,同时可延伸学习文档
中
涉及的软开关、故障仿真、微电网控制等关联技术,以拓展系统级设计能力。
群内分享图纸缺字报错,综合字体库从容应对.rar
做 CAD 的小伙伴注意啦!打开图纸文字乱码、缺字、全是问号?别慌,我整理了全套解决办法,大部分这
类
问题都能一次性修好,欢迎下载!
基于net8/10的跨平台高性能开源的工业物联网(IIoT)边缘计算网关 专注于工业现场设备数据的高效采集、边缘处理与可靠转发 项目面向真实工业场景设计,强调 稳定性、高性能、可扩展性与工程可维护性
一个开源的工业物联网(IIoT)边缘计算网关,专注于工业现场设备数据的高效采集、边缘处理与可靠转发。项目面向真实工业场景设计,强调 稳定性、高性能、可扩展性与工程可维护性,适用于工业自动化、能源、电力、制造、楼宇等多种应用环境。ThingsGateway 采用模块化与插件化架构,支持多种工业通信协议,可在边缘侧完成数据采集、预处理、协议转换与转发,有效降低系统耦合度与云端压力,是构建工业物联网系统的基础设施组件。
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章