我在一个加载COMCTL32.DLL
两次的过程中运行,一次使用版本5.82.7601.17514,一次使用版本6.10.7601.17514。旧版本由程序链接的一些旧DLL加载,另一个版本由较新的DLL加载。
如果我使用GetModuleHandle (L"COMCTL32.DLL")
,我无法控制解析的DLL。
当我调用GetProcAddress
来达到TaskDialogIndirect
时,我得到一个空指针,这肯定是因为我找回了旧DLL的句柄。
那么,是否有一些方法可以在加载两个DLL时找到TaskDialogIndirect
的地址。
如果没有,我可以以某种方式确保进程加载6.10版本而不是5.82版本,希望我们的旧版DLL能够与更新版本的COMCTL32
一起使用吗?
答案 0 :(得分:5)
我想您必须使用GetProcAddress()
而不是隐式链接,因为您希望您的应用在XP上运行,其中任务对话框不可用。
我可以为您看到三个选项:
LoadLibrary()
时comctl32 v6清单正在播放中。请致电LoadLibrary()
而不是GetModuleHandle()
,以确保您获得清单魔法。激活上下文方法是最干净的解决方案,但激活上下文API可能很难进入。我个人已经用它来确保Excel COM加载项链接到comctl32 v6。
模块枚举方法很快实现,有点脏,但效果很好。