error C2872: ULONG_PTR : ambiguous symbol 问题的解决

简介: error C2872: 'ULONG_PTR' : ambiguous symbol 问题的解决在做DTE addin插件开发的时候,使用了atl的CString,出现如下的错误vc/atlmfc/include/cstringt.
error C2872: 'ULONG_PTR' : ambiguous symbol 问题的解决
在做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") 

顺便说一下用到的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
目录
相关文章
|
1月前
ES6之Symbol
ES6之Symbol
|
3月前
|
JavaScript 前端开发
|
3月前
|
JavaScript 前端开发 开发者
|
1月前
|
JavaScript
js开发:请解释什么是ES6的Symbol,以及它的用途。
ES6的Symbol数据类型创建唯一值,常用于对象属性键(防冲突)和私有属性。示例展示了如何创建及使用Symbol:即使描述相同,两个Symbol也不等;作为对象属性如`obj[symbol1] = 'value1'`;也可作枚举值,如`Color.RED = Symbol('red')`。
|
3月前
|
JavaScript 前端开发
ES6之原始数据类型Symbol
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它属于 JavaScript 语言的原生数据类型之一,其他数据类型是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、大整数(BigInt)、对象(Object)。Symbol的作用是创建一个不可变且唯一的标识符,可以用作对象属性的键。它可以用来解决属性名冲突的问题,避免命名冲突。
34 0
|
7月前
ES6: Symbol概念与用法举例
ES6: Symbol概念与用法举例
27 0
|
8月前
|
JavaScript
es6数据类型Symbol以及es6操作数组常用的方法
es6数据类型Symbol以及es6操作数组常用的方法
58 0
|
9月前
Es6 symbol
Es6 symbol
31 0
|
9月前
|
前端开发 JavaScript
JS(第二十五课)ES6语法Symbol
JS(第二十五课)ES6语法Symbol
61 0