- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中有以下功能:
function GetDeviceChannelInfo_HSI(PortNumber, Address, ChNumber: Integer;
var State: Integer): PChar; stdcall; external DLL_FILENEAME;
WriteLn
时会发生什么?在它上面,我得到的只是
???????????
作为回应。
最佳答案
您没有打印指针地址。如果你是,你会得到一个看起来像地址(十进制或十六进制数)的东西,而不是问号。
截至 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/
当我从 Delphi 6 迁移到 Delphi 10.2 Tokyo 时当我尝试将 ^PChar 的指针转换为 PChar 数组时出现错误 type PServEnt = ^TServEnt;
所以,我有以下问题。我有 2 个 PChar 变量。我首先分配内存,执行一些操作,为第二个变量分配内存 - 在这一步中,第一个变量包含错误值(我在调试时看到它)。这是代码: procedure TRe
sharedMemory的此限制是实际的吗? 我已经传递给DLL字符串长度约370个字符,并且DLL毫无问题地读取了它。 我问,因为我将PChar从DLL返回到EXE程序。 在DLL中,我使用GetM
这似乎是一个基本问题,但我在任何地方都找不到解决方案。 我必须从内核模式获取信息。因此我与 IOCTL 一起工作。我的用户模式应用程序使用 DeviceIoControl 和 METHOD_OUT_D
我的应用程序中有以下功能: function GetDeviceChannelInfo_HSI(PortNumber, Address, ChNumber: Integer; var State:
我正在写一个使用C-DLL的工具。 C-DLL的功能需要char*,它采用UTF-8格式。 我的问题:我可以通过PChar还是必须使用UTF8Encode(string)? 最佳答案 考虑一个名为s的
对delphi win 32编程了解不多,希望有人能解答我的问题。 我将重复的 l_sGetUniqueIdBuffer 保存到我想避免的数据库中。 l_sGetUniqueIdBuffer 在行之间
我使用 WinSock 2 编写了一些 TCP 服务器,并且我有一个捕获 FD_READ 事件的程序。在此过程中,我需要解析收到的消息。代码在这里: procedure TfrmMain.WndPro
如果重要的话,我正在使用Delpi XE6。 我正在编写一个 DLL,它将从 Google 的 Directions API 获取响应,解析生成的 JSON 并确定行程的总距离。 GetJSONStr
考虑以下代码: procedure Test; var MyPCharArray: array of PChar; begin SetLength(MyPCharArray, 3); Ge
在分析过程中,我遇到了一个需要相当多时间的函数,但本质上可以归结为这段非常简单的代码: function GetSubstring(AInput: PChar; AStart, ASubstringL
我有这个代码: ShellExecute(Handle, 'open', 'C:\Users\user\Desktop\sample\menu\WTSHELP\start.h
我有一个非常愚蠢的问题......为什么这段代码: PChar('x'); 导致“访问冲突”错误?编译器优化? 示例: var s: String; ... s := StrPas(PAnsiChar
我有一个令人费解的结果,我很难理解。 我一直在尝试提高这个例程的速度 function TStringRecord.GetWord: String; begin // return the nex
我经常读到编译器在转换为 PChar 时会产生某种魔力。 . PChar的主要目的|是在期望零终止字符数组(C 风格的“字符串”)的库中调用外部代码。 PChar是 PWideChar 的别名类型关于
PAnsiChar 和 PChar 之间有区别吗?是什么类型? (德尔福2007年之前) 提前谢谢您! 最佳答案 D2009 及之后:是的,有。 PChar 是指向 Char 的指针,它是 unico
我正在使用ReadProcessMemory函数读取外部正在运行的应用程序的内容,我有一个指向PChar(UNICODE)的内存地址。我想知道哪种方法可以将该值返回到字符串变量? 现在我正在使用此代码
var S: string; begin SetLength(S, MAX_SIZE);// when casting to a PChar, be sure the string is no
我需要生成一个 href到一个 URI。除了需要百分比编码的保留字符外,一切都很容易,例如链接到 /some/path;element应显示为 (我知道 path;element 代表一个实体)。
我需要构造一个字符串并通过 PostMessage 发送它,即。 FileName := String_1 + String_2 + String_3; PostMessage(FWndHandle,
我是一名优秀的程序员,十分优秀!