社区
进程/线程/DLL
帖子详情
请教一个dll调用问题
hlq83
2010-05-10 04:10:54
应用程序A动态链接dll B,C. B,C都有导出方法FunA。问A中调用FunA时是调用那个DLL的。
...全文
87
10
打赏
收藏
请教一个dll调用问题
应用程序A动态链接dll B,C. B,C都有导出方法FunA。问A中调用FunA时是调用那个DLL的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hlq83
2010-05-13
打赏
举报
回复
[Quote=引用 9 楼 lisunlin0 的回复:]
类似的问题已经被多次討論过了,
如果b.dll和c.dll都导出了无函数名修饰的FuncA函数,
没有特别方便的解决方法(楼主要失望了)可以区别它们。
1、使用分模块查找的方法:
b_funcA = GetProcessAdress(GetModule(_T("a.dll")), "FuncA");//假设a.dll已经加载
c_funcA = GetProcessAdress(……
[/Quote]
lisunlin0 给我讲些3的机制吧,其实我知道怎么明确去调用具体哪个dll的FuncA。我想知道如果程序A不明确调用哪个dll的FuncA时,它是怎么个查找法?
“a.obj本身->a.lib内其它obj模块->a.lib以外的函数“ 查找a.lib以外的函数,它发现两个,随机取一个吗?
sunlin7
2010-05-12
打赏
举报
回复
类似的问题已经被多次討論过了,
如果b.dll和c.dll都导出了
无函数名修饰的
FuncA函数,
没有特别方便的解决方法(楼主要失望了)可以区别它们。
1、使用分模块查找的方法:
b_funcA = GetProcessAdress(GetModule(_T("a.dll")), "FuncA");//假设a.dll已经加载
c_funcA = GetProcessAdress(GetModule(_T("c.dll")), "FuncA");//假设b.dll已经加载
2、使用d.dll包装b.dll(或者c.dll):在d.dll里面使用另外的名字(例如 dFuncA )转发b.dll的FuncA函数。
3、根据链接时函数名查找顺序原理:假设a.c里面调用了FuncA函数,编译后生成a.obj,并被打包在a.lib里面,则FuncA的查找顺序是“a.obj本身->a.lib内其它obj模块->a.lib以外的函数“。这时a.c里面只能调用b.dll或者c.dll某一个模块的函数,否则仍不可区分FuncA函数所在模块。
ljz888666555
2010-05-10
打赏
举报
回复
你可以考虑下,
#define
如Windows下的API
#define SetWindowsText SetWindowsTextA
#define SetWindowsText SetWindowsTextW
hlq83
2010-05-10
打赏
举报
回复
没有人回答到点子上,其实我想知道它是如何去找调用函数的。
xhuacmer
2010-05-10
打赏
举报
回复
这个一般是A吧,就要看你是导出那个DLL了
真相重于对错
2010-05-10
打赏
举报
回复
那当然会有问题,这叫dll hell
hlq83
2010-05-10
打赏
举报
回复
我是动态链接的,不是动态加载
wltg2001
2010-05-10
打赏
举报
回复
应用程序A动态链接dll B,C. B,C都有导出方法FunA。问A中调用FunA时是调用那个DLL的。
========
动态调用没有这个问题的,
yschenwei
2010-05-10
打赏
举报
回复
你
HMODULE LoadLibrary(
LPCTSTR lpFileName
);
的时候 传进去的是哪个DLL的名称,得到的就是这个动态库的句柄。
调用方法是用 GetProcAddress 。
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
传入的第一个参数就是 动态库的句柄,第二个参数是方法名。
明白了吧。
真相重于对错
2010-05-10
打赏
举报
回复
loadlibrary
getprocessaddress
游戏画面就弹出内存不能为read修复工具
1、 开始-运行窗口,输入“regsvr32 actxprxy.
dll
”回车,接着会出现
一个
信息对话 框“
Dll
RegisterServer in actxprxy.
dll
succeeded”,确定。再依次运行以下命令。(这个方法有人说没必要,但重新注册一下那些.
dll
...
W32dasm 无极版
此版使用ASPackV2.12压缩 ...
请教
问题
: 在汉化此版时,一直想在右键加入跳转功能.看了pll621大哥diy pe若干篇始终没有实现,请高 手不吝赐教.(实现功能:用右键直接实现对W32Dsm.
dll
中的跳转位置功能
调用
)
0x00000000内存不能为read修复工具
例五:双击
一个
游戏的快捷方式,“Ox77f5cdO”指令引用“Oxffffffff”内存,该内存不能为“read” ,并且提示 Client.dat程序错误。 解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。 例六:
一个
...
asp.net知识库
一个
时间转换的
问题
,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP...
餐厅管理信息系统课程设计
工程使用的是基于对话框的程序,每个对话框为
一个
类,父类为CDialog,实现的一些功能都封装在类的函数中,体现了面向对象编程语言C++的特性。 导入ADO接口:在工程的stdafx.h文件里直接引入符号#import引入ADO库文件...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章