疯狂系列TObject
中的另一个。Double
SetPixel
需要 aDouble
作为其第一个参数(即指向 a 的指针IBlittable
)。
GetWindowByHWND
返回一个Double
。
这不起作用(段错误):
var
B: Double;
begin
B := GetWindowByHWND(0);
while (true) do SetPixel(B, 3, 3, $FFFFFF);
end.
然而这确实:
var
B: IBlittable;
begin
B := IBlittable(Floor(GetWindowByHWND(0)));
while (true) do SetPixel(Double(Integer(B)), 3, 3, $FFFFFF);
end.
这是 GetWindowByHWND 方法:
function GetWindowByHWND(Handle: Double): Double; STDCall;
var
ReturnVal: IBlittable;
begin
ReturnVal := TWindow.Create(Floor(Handle));
GetWindowByHWND := Double(Integer(ReturnVal));
end;
为什么它会这样工作?
它是否与某种永远不应在实际生产代码中使用的“堆栈上的内存”怪异有关?