问题标签 [widestring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
164 浏览

c++ - 将“L”添加到字符串文字可以使其成为宽字符串,但不能添加到变量

该宏#define STR16(x) L ## x在应用于字符串文字时起作用:

但不是变量:

这个有用库的第 200 行,有一个错误:

将被翻译成

失败,因为Lp是一个未声明的标识符。

L除了将字符串文字添加到字符串变量之外,如何做同样的事情const char *

0 投票
1 回答
1753 浏览

widestring - 查找宽字符串的长度

要查找非宽字符串的长度,我们使用以下strlen函数:

我的书说的就是使用语法:

但是,我已经尝试了很多方法来做到这一点,但它从来没有奏效:

使用 D 格式说明符:

使用 U 格式说明符

使用类型 SIZE_T 的变量

我们如何找到字符串的长度,以便得到与第一个类似的输出?(最后三个代码都产生错误)

0 投票
2 回答
1723 浏览

c++ - 我们什么时候应该更喜欢宽字符串?

我正在对一个大型的遗留 MFC 代码库进行现代化改造,其中包含一个名副其实的字符串类型混合体:

  • 字符串
  • 标准::字符串
  • 标准::wstring
  • 字符*
  • wchar_t*
  • _bstr_t

我想在内部对单个字符串类型进行标准化,并且仅在第三方 API(即 COM 或 MFC 函数)绝对需要时才转换为其他类型。我和我的同事正在辩论的问题;我们应该标准化哪种字符串类型?

我更喜欢 C++ 标准字符串之一:std::string 或 std::wstring。我个人倾向于std::string,因为我们不需要宽字符——它是一个内部代码库,没有面向客户的UI(即不需要多语言支持)。“普通”字符串允许我们使用简单、朴素的字符串文字(“Hello world” vs L“Hello world”或_T(“Hello world”))。

编程界有官方立场吗?当面对多种字符串类型时,通常使用什么作为标准的“内部”存储格式?

0 投票
1 回答
725 浏览

sql - 尝试选择“宽字符串”类型的字段时出现来自 VBA 的 SQL 查询问题(访问 .mbd 文件)

我正在尝试将一些数据从 .mbd 文件导入 Excel。我可以将整个数据库复制到电子表格中,没有问题。我也可以使用这样的语句

在类型不是 int 或 float 的字段上使用 WHERE 时会出现问题。(我没有 MS Access,但 MDB Plus 告诉我 .mdb 中文本字段的类型称为“Widestring”)

我从 Excel 的 MsgBox 中得到这个:运行时错误'-2147217913 (80040e07)':自动化错误

我一直在谷歌搜索和修补很长一段时间,但我被卡住了。下面是我的 VBA 代码。我不知道这是否与提供商(Microsoft.ACE.OLEDB.12.0)有关,但我尝试了其他一些。我也在考虑 unicode,因为这个数据库来自一个德国测量程序。

0 投票
1 回答
669 浏览

multithreading - 为什么我的 Delphi dll 中需要 Sharemem,它只公开一个带有 WideString 参数的函数?

我有一个 dll 和一个用 Delphi 编写的测试应用程序。测试应用程序使用多个线程调用dll导出的函数。导出的函数有一个简单的线程安全实现。运行测试应用程序时会发生各种错误(访问冲突、无效指针操作、堆栈溢出等)或应用程序冻结。在某些情况下,应用程序完成时不会出现错误。

请注意,这些错误仅在使用多个线程时发生(表面)。只有从主线程调用函数时,一切正常。

我发现将 ShareMem 添加到 dll 和应用程序可以阻止所有这些类型的错误。但我不明白为什么。据我所知,只有在 dll 和应用程序之间传递长字符串时才需要 ShareMem。据我所知 WideString 不是一个长字符串。

同样根据这篇文章 ShareMem 不应该是必需的: 为什么 Delphi DLLs 可以使用 WideString 而不使用 ShareMem?

这是dll的来源:

这是测试应用程序:

为什么 ShareMem 可以消除这些错误,还有其他方法可以修复这些错误吗?

我正在使用 Delphi XE2 和 OmniThread 3.07.5。

更新 - 从 VCL 应用程序的按钮的单击事件处理程序运行时出现相同问题 - 如果 DoSomething 在内部使用关键部分,则运行良好 - 如果从 TMyClass 中删除 FText 字段,则不会报告错误,但应用程序会随机冻结

0 投票
1 回答
6881 浏览

c++ - 无法从“const char *”转换为“LPCTSTR”

我正在尝试将字符串转换为“LPCTSTR”,但是出现以下错误。

错误 :

代码:

另外,尝试过:

但是,打印垃圾值。

0 投票
2 回答
1517 浏览

c++ - wcout 没有按需要输出

我一直在尝试为一个项目编写 C++ 应用程序,但遇到了这个问题。基本上:

在其他一些文件中:

我有一个函数基本上输出所有内容AllClasses,问题是 wcout 没有按需要输出。

输出是'Class:Bili',没有别的。程序甚至不尝试输出其他条目而只是挂起。我在使用 G++ 6.3.0 的 Windows 上。而且我没有使用 Windows 的 cmd,我使用的是 mingw 的 bash,所以编码不会有问题(或者不是吗?)。有什么建议吗?

编辑:源代码编码也不是问题,只是检查它是UTF8,VSCode的默认值

编辑:也只是检查了字符串文字是否有问题。

输入一些非 ASCII 字符,如 'ö' 和 'ş',效果很好。宽字符串文字有什么问题?

编辑:给你

使用 G++ 编译:g++ file.cc -O3

此代码仅输出“Bili”。一定是g++搞砸了二进制编码(?),因为输入值wcin然后输出它们wcout不会产生任何问题。

0 投票
2 回答
449 浏览

delphi - 如何将字号传递给宽字符串?

首先,我很抱歉我不能更好地描述我的问题。

我所拥有的是字号 65025,它是二进制的 0xFE01 或 11111110 00000001。我想将值传递给 wstr Word => 11111110 00000001。

我发现使用类型转换不起作用。

还有一个问题。如果我想添加另一个数字,例如 10000 => 0x03E8,该怎么做。所以在结果中,宽字符串应该引用值 0xFE01 0x03E8。

然后,如何从宽字符串检索相同的数字到单词?

编辑:

我正在给出另一个更简单的示例来说明我想要什么...如果我的字值 49 等于 ASCII 值 1,那么我希望 wstr 为“1”,即二进制 b00110001。我想将位从字号复制到字符串。

0 投票
1 回答
187 浏览

winapi - 如何将“宽”字符串读入缓冲区?

Windows API 具有GetWindowTextW将字符串读入您提供的缓冲区的功能。如何提供这样的缓冲区,然后在 Rust 中从中读取字符串?

PS 与此问题相比,Calling the GetUserName WinAPI function with a mutable string 不会填充字符串, 此问题一般侧重于 Windows 上的字符串读取,而不是特定问题。此外,这个问题有望通过关键字轻松搜索到,回答所要求的内容。

0 投票
1 回答
337 浏览

c++ - 尝试使用宽字符串创建类时访问冲突

我正在编写一个应该读取调试日志、解析日志并激活谷歌文本到语音的代码,这将提供有关吐出它的游戏的信息。

该日志具有 UTF-8 编码,因此我在代码中使用宽字符串,代码编译和解析字符串都很好,直到我尝试创建一个类对象。

然后我得到一个访问冲突:

崩溃前的变量值

(已编辑)