为什么我提出,“从VS2003转换为VS2010后,无法将参数2从'WORD [129]'转换为'LPOLESTR'”?

问题描述:

转换旧VS2003项目VS2010,我已经无意中发现了一个错误:为什么我提出,“从VS2003转换为VS2010后,无法将参数2从'WORD [129]'转换为'LPOLESTR'”?

cannot convert parameter 2 from 'WORD [129]' to 'LPOLESTR' 

谁能给我提供一个提示,什么可能导致这个问题?

+0

任何人都是什么?有cookie吗?我确实,但我不打算分享。 –

+0

这将有助于查看产生错误的代码。 –

+3

发布相关行和一些上下文可能会有助于诊断相当多......在此期间,-1​​。 –

好了,你没有发布任何代码,所以我会只是假设你有定义为一个宽字符串,

WORD wszMyAwesomeStringThatsGonnaBePassedToAnAPIatSomePoint[129] = "Booga!"; 

看到,VS2005,MS gets with the program,使wchar_t的内置类型。在此之前,它只是一个typedef ... unsigned short。这是罚款为您的目的,因为无论是WORD *和LPOLESTR unsigned short*别名。

但现在,wchar_t是一个内置类型,并且LPOLESTR被定义 - 假设您没有编译OLE2ANSI定义 - 作为__RPC_string wchar_t* ...因此,您的代码中断。

如果您已经愤怒地打字,“U说谎!我不使用WORD ANYWHERE !!!”,停止 - 你很可能被使用不同的typedef甚至是的#define最终导致您的变量被定义为WORD的数组。也许你正在使用一些将XML预编译为包含WORD数组的结构的复杂框架;也许别人为你写了代码,你甚至从来没有看过它。

但是由于您没有发布任何代码显示我们如何声明问题的字符串,所以我不能说。

+0

甚至在VS2005之前(至少在VS2003中),可以将'wchar_t'视为内建类型(IIRC有'/ Zsomething'选项)。 –

+0

是的,它是一个编译器选项,但是AFAIK或者被* default *关闭,或者被从早期版本的VS转换而来的项目关闭。 – Shog9

+0

当然,这只是一些无偿的硝烟。 :)我实际上给了你我的+1(我也在想这样的事情,我的第一个想法是关于全大写'WCHAR_T'的冲突声明)。 –