gpt4 book ai didi

c++ - LPTSTR 只包含一个字母

转载 作者:行者123 更新时间:2023-11-30 03:44:17 24 4
gpt4 key购买 nike

我正在为应用程序创建 DLL。应用程序调用 DLL 并接收长度为 8 到 50 的字符串。

我遇到的问题是仅显示应用程序收到的任何消息的第一个字母

下面是 GetMethodVersion 函数。

#include "stdafx.h"
STDAPI_(void) GetMethodVersion(LPTSTR out_strMethodVersion, int in_intSize)
{
if ((int)staticMethodVersion.length() > in_intSize)
return;
_tcscpy_s(out_strMethodVersion, 12, _T("Test"));
//staticMethodVersion should be insted of _T("Test")
}

项目设置设置为 Unicode。经过一些研究,我相信 Unicode 格式及其功能存在问题。感谢您提供的任何帮助。

最佳答案

您在问题中写道,项目设置是 Unicode: DLL 和调用 EXE 是否都是如此?确保它们都匹配。

在 Unicode 构建中,丑陋的 TCHAR 宏变成:

LPTSTR      --> wchar_t*
_tcscpy_s --> wcscpy_s
_T("Test") --> L"Test"

所以你有:

STDAPI_(void) GetMethodVersion(wchar_t* out_strMethodVersion, 
int in_intSize)
{
...
wcscpy_s(out_strMethodVersion, 12, L"Test");
}

您确定“魔数(Magic Number)” 12 是正确的吗? out_strMethodVersion 指向的目标字符串缓冲区的大小是否至少为 12 个 wchar_t(包括终止 NUL)?

然后,查看调用站点(您尚未显示)。

如何打印返回的字符串?也许您正在使用 ANSI char 函数,因此返回的字符串被误解char* ANSI 字符串,因此第一个 Unicode UTF-16 字符串的 0x00 字节在调用站点被错误解释为 NUL 终止符,并且字符串在打印时在第一个字符处被截断?

 Text:             T       e       s       t      NUL
UTF-16 bytes: 54 00 65 00 73 00 74 00 00 00
(hex) **<--+
|
First 00 byte misinterpreted as
NUL terminator in char* ANSI string,
so only 'T' (the first character) gets printed.

编辑

您在评论中澄清的事实是:

I switched the DLL to ANSI, the EXE apparently was that as well, though the exe was documented as Unicode.

让我觉得 EXE 采用 UTF-8 Unicode 编码。

正如在ANSI字符串中,UTF-8中的一个0x00字节是一个字符串NUL终止符,所以前面分析UTF-16中的0x00字节(在wchar_t) 被错误解释为字符串 NUL 终止符适用。

请注意,纯 ASCII 是 UTF-8 的真子集:因此如果您只使用纯 ASCII 字符(如 "Test")并将它们传递给 EXE,您的代码可能会工作。

但是,如果 EXE 被记录为使用 Unicode UTF-8,您可能想要做正确的事并从 DLL 返回 UTF-8 字符串。

字符串通过 char* 返回(对于 ANSI 字符串),但是确保 UTF-8 是 DLL 使用的编码很重要返回该字符串,以避免将来出现细微错误。

虽然 Windows API 和 Visual Studio 中使用的一般术语是“Unicode”,但在这些上下文中它实际上是指 UTF-16 Unicode 编码。

但是,UTF-16 并不是唯一可用的 Unicode 编码。例如,为了在 Internet 上交换文本,UTF-8 编码被广泛使用。在您的情况下,听起来您的 EXE 需要一个 Unicode UTF-8 字符串。

关于c++ - LPTSTR 只包含一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35576973/

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