gpt4 book ai didi

c++ - 如何在 IDL 中声明宽字符常量

转载 作者:行者123 更新时间:2023-11-28 03:59:57 27 4
gpt4 key购买 nike

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

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

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

const LPSTR STRING_CONST_NAME = "字符串值";

我们想这样定义它:

const LPTSTR STRING_CONST_NAME = "STRING VALUE";

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

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

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

const LPTSTR STRING_CONST_NAME = L"STRING VALUE";

最佳答案

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

如果你想在 IDL 文件中使用它们,cpp_quote 它们可能就足够了。

如果您确实希望在 IDL 中按字面意义使用它们,您可以使用 #ifdef 来获得两个不同的定义。在那种情况下,您还应该有两个不同的类型库,具有不同的接口(interface)集、不同的 UUID 等等。

关于c++ - 如何在 IDL 中声明宽字符常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com