我已經得到了非常愚蠢的問題... 爲什麼這個代碼:鑄造面值爲PChar類型/ PAnsiChar
PChar('x');
原因 「訪問衝突」 錯誤? 編譯器優化?
實施例:
var s: String;
...
s := StrPas(PAnsiChar('x'));
這導致AV在Delphi 5/Delphi的XE
或者這一個:
Windows.MessageBox(0, PChar('x'), PChar('y'), 0);
這導致AV在Delphi 5,但不是在Delphi XE 在XE中有一個空的MessageBox
控制檯示例:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var s: String;
begin
s := StrPas(PChar('xxx')); // EAccessViolation here
end.
另一個非常愚蠢的問題是:你使用的是什麼版本的Delphi?任何人如何重現這一點?因爲僅僅這一行就不能編譯。 – 2015-02-12 06:31:21
已更正+示例 我需要將字符串變量更改爲文字以進行測試,並且我有點驚訝...... @David Heffernan這是一個要點xD – 2015-02-12 07:06:02
我想知道。 「x」是一個char字面量嗎?所以只有一個字符?也許這就是我所缺少的。 – 2015-02-12 07:13:41