Long Long Ago

很久很久以前

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

在做DTE addin插件开发的时候,使用了atl的CString,出现如下的错误

vc\atlmfc\include\cstringt.h(2508): error C2872: 'ULONG_PTR' : ambiguous symbol

//省略错误信息

原因是basetsd.h(123) : __w64 unsigned long ULONG_PTR'与DTE中的EnvDTE::ULONG_PTR定义冲突

在codeproject上找到了解决方法,在引入DTE 的类型库时,将ULONG_PTR改名:

将自动生成的stdafx.h中的

 

#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("8.0") lcid("0") raw_interfaces_only named_guids 

 

 

后面增加对ULONG_PTR的改名,变为如下的样子:

#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("8.0") lcid("0") raw_interfaces_only named_guids rename("ULONG_PTR","ULONG_PTRDTE"

done。

顺便说一下用到的import预处理指令的两个属性

named_guids:定义IID和CLSID的名字,否则要用__uuidof(...)来引用 
raw_interface_only:仅使用原始接口,缺省时import会自动生成符合automation的接口。 
比如: 
Foo([out, retval] long * pVal);这个函数,缺省时调用:long val = obj->Foo(); 
如果用了raw_interface_only就要: 
long val; 
xx->Foo(&val);  

参考资料:

1.#import属性

http://msdn.microsoft.com/en-us/library/298h7faa(v=VS.80).aspx

2.codeproject中关于处理此问题的回复

http://www.codeproject.com/KB/system/caaregistryclass.aspx?msg=2330913

3.import的两个属性解释

http://hi.baidu.com/invisiable/blog/item/370bb71b209a2ff0ae513318.html

posted on 2010-11-13 16:46  很久很久以前  阅读(1754)  评论(0)    收藏  举报