WTL通用对话框dll链接问题

1 篇文章 0 订阅
1 篇文章 0 订阅

 

问题起因:在两个项目中都使用了WTL的CToolTipCtrl,但是其中一个可以正常显示,另一个则怎么都显示不出来。怎么查找都找不到原因。后同事发现(BOOL)::SendMessage(m_hWnd, TTM_ADDTOOL, 0, ti);总是调用失败,后经分析是链接的TTM_ADDTOOL消息处理函数的dll不一样,导致对结构体
   
的解析存在差异,从而调用失败。
在stdafx.h中,默认VS2005项目会定义#define _WIN32_WINNT 0x0501,表示NT版本为0x0501,但是系统默认连接的通用对话框的dll却是0x0500或以下版本的。
------------------------------------------------------------
因此该问题则有两个解决方案:
方案一:将#define _WIN32_WINNT 0x0501改为#define _WIN32_WINNT 0x0500或更低版本。
方案二:在stdafx.h最后加上:
   
当然方案二还可以是在  项目属性===》配置属性===》链接器===》清单文件===》附加清单依赖项中加入
#pragma comment(linker, "/manifestdependency:/"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'/"")
亦可。

 

----------------------------------------------------------------

参考:

让 Visual Studio 2005 自动生成 Manifest

Permanent Link: http://wutiam.net/2009/08/manifest-dependencies-in-visual-studio-2005/

微软同学永远是个把简单问题复杂化的孩子,这不,当年为了在 Windows XP 中同时支持两套控件风格(新的 XP 风格和旧的 95/98 风格),“发明”了 .manifest 这么个玩意,使以前的老程序也能自动使用上新的控件风格。

然而在 VS 里,微软并不是总是默认帮我们自动生成这个破玩意儿。最早的办法就是手写一个 .manifest XML 文件,不过这个办法在 VS 2005 编译出来的程序里似乎并不起作用。当然,新方法总是随之而出的,而且很“简单”(绕了一大圈又回来了):

在 Project Properties 对话框的 Configuration Properties | Linker | Manifest File | Additional Manifest Dependencies 选项里,填入:

"type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'"

或者在程序里直接写下如下代码:

#pragma comment(linker, "/"/manifestdependency:type='Win32' name='Test.Research.SampleAssembly' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='0000000000000000' language='*'/"")

太阳又照常东升西落了 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值