【发布时间】:2013-06-08 01:31:33
【问题描述】:
TObject 到 Double 疯狂系列中的另一个。
SetPixel 需要 Double 作为其第一个参数(即指向 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;
为什么会这样?
它是否与某种“堆栈上的内存”的怪异现象有关,而这种怪异永远不应该在实际生产代码中使用?
【问题讨论】:
标签: pointers casting integer pascal