- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常读到编译器在转换为 PChar
时会产生某种魔力。 .PChar
的主要目的|是在期望零终止字符数组(C 风格的“字符串”)的库中调用外部代码。PChar
是 PWideChar
的别名类型关于 Unicode Delphi 和 PAnsiChar
的别名在非 unicode Delphi 上。
另一方面,Delphi 字符串( string
= AnsiString
/UnicodeString
,我在这里不是在谈论 WideString
,更不用说 ShortString
...)具有隐藏长度而不是终止字符。它们也被引用计数并在写入时使用复制。
Delphi 字符串是否自动分配并使用隐式 #0 字符保持一个字符长,以便强制转换为 PChar
(PAnsiChar/PWideChar) 更容易或当遇到转换为 PChar
时,编译器会检查和调整字符串吗? ?
最佳答案
过程如下:
s
长度大于零,则 PChar(s)
返回指向字符串内容的第一个元素的指针。因为string
设法拥有一个隐藏的空终止符,无需再做任何事情。 s
长度为零,则 PChar(s)
返回指向包含空终止符的内存块的指针。 PChar(nil)
返回的空终止符是在已编译模块的只读部分中分配的全局常量。
Are Delphi strings automatically allocated and kept to be one char longer with an implicit #0 char in order to make casting to a PChar (PAnsiChar / PWideChar) easier?
PChar()
在空字符串上返回一个指向空终止符的指针。 关于string - PChar/PWideChar/PAnsiChar 转换中是否有任何编译器魔法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980880/
当我从 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,
我是一名优秀的程序员,十分优秀!