0

我们正在将我们的 C++ COM 应用程序迁移为 unicode,作为此迁移的一部分,我们希望将 IDL 中的常量字符串也迁移到 unicode。

问题是目前我们仍然在 ANSI 和 UNICODE 中编译它,这意味着我们不能使用 L"String" 构造来声明宽图表。

目前,我们的字符串常量定义如下:

const LPSTR STRING_CONST_NAME = "字符串值";

我们想这样定义它:

const LP T STR STRING_CONST_NAME = "字符串值";

如果它是常规代码,我们只需添加 _T("STRING VALUE") 宏,它会在以 unicode 编译时将其转换为 L"STRING VALUE"

但据我所知,我们不能在 IDL 中使用它,因为 _T 是纯 C++ 构造。

我们的方法是否正确?也许我们无论如何都应该这样定义它:

const LP T STR STRING_CONST_NAME = L "字符串值";

4

2 回答 2

2

我想知道为什么您需要在 IDL 文件中包含字符串常量。将它们放在头文件中还不够吗?我看到微软仅在 sapiaut.idl 中具有宽字符串文字(查看所有平台 SDK IDL 文件);由于这几个常量从未使用过,这也可能是一个错误。另请注意,这些常量定义为BSTR.

如果您希望它们出现在 IDL 文件中,cpp_quote 可能就足够了。

如果您绝对希望它们在 IDL 中字面意思,您可以使用 an#ifdef来拥有两个不同的定义。在这种情况下,您还应该有两个不同的类型库,具有不同的接口集,具有不同的 UUID,等等。

于 2009-08-23T08:23:08.063 回答
0

如果它应该始终是 Unicode,那么使用“T”结构是没有用的——只要这样做;

  const LPCWSTR STRING_CONST_NAME = L"STRING VALUE";

“W”代表“宽”——

不确定 Windows 定义的 LPC*STR 类型定义如何与 IDL 相互作用,但如果 LPSTR 有效,那么各种各样的也应该有效。

于 2009-08-23T08:05:35.227 回答