gpt4 book ai didi

c++ - 当我定义 UNICODE 和/或 _UNICODE 时,非 unicode API 函数会发生什么情况?

转载 作者:行者123 更新时间:2023-11-28 06:21:49 25 4
gpt4 key购买 nike

在 MS Visual Studio 中,当您不设置字符集时,AfxMessageBox()(以及无数其他 API 函数)之类的函数将很乐意接受 CStringA 参数.但是当您将字符集设置为 Unicode 时,看似完全相同的函数将只接受 CStringW 参数。

现在这正是文档所说的应该发生的......但是......那些非 Unicode API 函数到底去了哪里?它们是否仍然以其他名称链接到(AfxMessageBoxA() 可能?)。通过什么魔法,一个 API 消失而另一个 API 出现在它的位置上……或者……通过什么恶作剧的黑客技巧可以使它们重新出现?如果有可能使它们在 Unicode 存在的情况下重新出现,是否应该(明智地)使用这种黑客恶作剧?

最佳答案

afxwin.h中AfxMessageBox()的声明是:

   int AFXAPI AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK,
UINT nIDHelp = 0);

适配字符串类型的是LPCTSTR。如果您使用有效的 UNICODE 进行编译,那么它是 const wchar_t* 的别名。没有它就是 const char*。没有 AfxMessageBoxA() 版本。

这与 winapi 函数的工作方式有很大不同,必然如此,因为这是一个以不同方式处理的 C++ 函数。从技术上讲,他们本可以提供该功能的另一个重载,但他们没有。您还会有不同的链接需求,您需要链接 MFC 库的非 Unicode 版本以使链接器满意。值得注意的是它已被弃用并且不再随最近的 VS 版本一起提供,但仍然可以(现在)作为单独的下载。

这应该可以回答您的问题,它不会去任何地方,它根本不存在。混合不起作用,您需要 A2W() 来转换字符串。如果需要,您当然可以简单地编写自己的重载。

关于c++ - 当我定义 UNICODE 和/或 _UNICODE 时,非 unicode API 函数会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189683/

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