- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常愚蠢的问题......为什么这段代码:
PChar('x');
导致“访问冲突”错误?编译器优化?
示例:
var s: String;
...
s := StrPas(PAnsiChar('x'));
这会导致 Delphi 5/Delphi XE 中出现 AV
或者这个:
Windows.MessageBox(0, PChar('x'), PChar('y'), 0);
这会在 Delphi 5 中导致 AV,但在 Delphi XE 中则不会在XE中有一个空的MessageBox
控制台示例:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var s: String;
begin
s := StrPas(PChar('xxx')); // EAccessViolation here
end.
最佳答案
StrPas(PAnsiChar('x'));
我认为 'x'
被视为字 rune 字而不是字符串文字。所以 Actor 阵容无效。如果是这样,那么这将按您的预期工作
StrPas('x');
由于隐式转换。或者
StrPas(PAnsiChar(AnsiString('x')));
感谢显式转换。
我认为前者可能是首选。文字不需要转换为空终止的指针类型。编译器无需强制转换即可发出正确的代码。并且强制转换总是冒着抑制错误的风险。
关于delphi - 将文字转换为 PChar/PAnsiChar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28470810/
当我从 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,
我是一名优秀的程序员,十分优秀!