gpt4 book ai didi

delphi - 为什么我在控制台打印 PChar 时会出现问号?

转载 作者:行者123 更新时间:2023-12-03 19:33:44 28 4
gpt4 key购买 nike

我的应用程序中有以下功能:

function GetDeviceChannelInfo_HSI(PortNumber, Address, ChNumber: Integer;
var State: Integer): PChar; stdcall; external DLL_FILENEAME;

我要做的就是将结果打印到控制台。但是,当我调用 WriteLn 时会发生什么?在它上面,我得到的只是 ???????????作为回应。

我假设控制台不知道如何打印它。也许它是Unicode或其他东西,它不能被打印?

我是 Delphi 的新手,真的不知道为什么会这样。我实际上是在打印指针地址吗?我真的不知道。任何帮助,将不胜感激。

最佳答案

您没有打印指针地址。如果你是,你会得到一个看起来像地址(十进制或十六进制数)的东西,而不是问号。

截至 2009 年德尔福,PChar是指向 Unicode 字符的指针。如果您使用的是该版本或更高版本,请确保这是您的函数真正返回的内容。该函数更有可能返回一个指向非Unicode字符的指针——如果你从函数返回char*的C代码中翻译它,它将返回一个指针。 .该类型的正确 Delphi 翻译是 PAnsiChar .

当您打印不是真正字符的宽字符,或者在当前字体中没有表示的宽字符时,您通常会得到问号。

如果您使用的是较早的 Delphi 版本,并且该函数确实返回 PWideChar ( wchar_t* ,在 C 中),那么您可能会遇到相反的问题,当函数为您提供宽字符时打印窄字符。不过,这不太可能,因为您收到的宽字符无论如何都是 ASCII 问题,因此您的程序会在打印第一个字符并遇到构成宽字符后半部分的 nul 字节后停止。

您可以使用调试器让自己了解您真正拥有的东西。获取函数提供给您的地址,然后在内存浏览器(CPU View 的一部分)中访问该地址。您可以让 Delphi 以不同的格式显示内存,包括字符、宽字符和各种宽度的数字。如果您对应该得到的结果有所了解,这也会有所帮助。然后你可能会识别出内存中的模式。

关于delphi - 为什么我在控制台打印 PChar 时会出现问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045967/

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