C ++在Unicode Release MinDependency中编译错误,但在Debug中没有

时间:2009-07-31 17:59:01

标签: c++ compiler-errors

首先,我要说我负责创建和管理构建和安装,而且我不是C ++开发人员,所以下面的大多数错误对我来说都是不可理解的。

据说开发人员(现在不在身边)检查了一些在Debug | Win32(使用VS08)中编译良好的代码,但我需要在Unicode Release MinDependency | Win32中编译它。

有88个错误,但似乎都归结为“转换”问题,而且所有问题都只是下面列出的错误。

  • 编译错误是否与编码错误有关(C ++,ATL)?

  • 是否有一些编译选项开关或VS设置我可以更改以将其编译为MinDep?

  • 是否有一个简短的解释是什么导致了这一点,所以我理解手头的问题?

错误:

cannot convert from 'unsigned short *' to 'ATL::CComBSTR'
cannot convert from 'wchar_t *' to 'unsigned short *'
cannot convert parameter 1 from 'unsigned short *' to 'wchar_t *'
cannot convert parameter 1 from 'LPWSTR' to 'const unsigned short *'
cannot convert parameter 2 from 'BSTR' to 'const unsigned short *'
cannot convert parameter 2 from 'LPWSTR' to 'const unsigned short *'
none of the 2 overloads could convert all the argument types
cannot convert parameter 1 from 'unsigned short *' to 'const OLECHAR *'
cannot convert parameter 1 from 'unsigned short [4096]' to 'wchar_t *'

3 个答案:

答案 0 :(得分:4)

问题是代码编写得很糟糕。开发人员假设在使用Unicode编译时不能保留的字符和整数类型。问题不在于Visual C ++,ATL或Visual Studio。

显然,有一个编译器开关可用于编译,因为这可能是Debug和Unicode Release Mindependency版本之间的主要区别。但是,您不希望切换它,因为这意味着您不再进行实际的Unicode Release Mindependency构建。

您会注意到每个转换消息都在unsigned short *(指向特定整数类型的指针)和字符串的某种表示之间。在正确编写的C ++中,您不能在整个地方之间转换整数和字符类型。可能有必要这样做,例如在处理遗留代码时,但它是潜在问题的根源,需要仔细观察。

您需要重写此代码。你说开发人员不在身边(因为做这样的事情而被解雇了,也许?),所以你必须让其他开发人员来解决它。

答案 1 :(得分:1)

Visual Studio IDE中有几个地方(此处假设为2008),您可以在其中检查调试和发布版本中是否具有相同的设置:

项目属性 - >一般 - >字符集(设置为使用Unicode字符集)

项目属性 - > C / C ++ - >语言 - >将wchar_t视为内置类型(通常设置为是)

项目属性 - > C / C ++ - >命令行 - 您应该看到定义了UNICODE和_UNICODE

如果这两个版本中的设置相同 - 由于条件编译可能会发生这种情况可能会更糟糕,并且在那里它取决于他正在使用的特定库或他的代码。

你可以在这里阅读http://msdn.microsoft.com/en-us/library/xt153e2k(VS.71).aspx关于MinDependency的含义。它实际上是ATL关于如何链接crt的定义。

请注意,wchar_t被定义为unsigned short - 所以它只是错过了那里的定义 - 而不是如上所述的实际转换错误。我没有VC 6来测试它,但在VC9下它是这样的:

#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif

答案 2 :(得分:-1)

错误都与字符串相关。有人可能在发布模式下的调试模式下启用/禁用了unicode和/或宽字符串。尝试在Visual Studio的“发布”模式的设置中翻转这些设置,看看它是否可以编译。或者,检查Release和Debug模式之间的所有设置匹配。

相关问题