0

我正在编写一个 DLL 来与 Game Maker 交互。(游戏制造商仅以Doubles 交易。)

这是一个函数:

function CreateBitmap(W, H: Double): Double;
var
  TBM: TBitmap;
begin
  TBM := TBitmap.Create(Floor(W), Floor(H));
  CreateBitmap := Double(Integer(@TBM));
end;

所以当我得到 Double 回来时:

function DestroyBitmap(Handle: Double);
begin
  <How do I free it?>
end;

如何释放这个 Double?我试着做

function DestroyBitmap(Handle: Double);
var
  Blittable: IBlittable;
begin
  Blittable := Pointer(Floor(Handle))^
  Blittable.Free;
end;

但是由于无法确定指针的类型,因此Blittable( IBlittable) 不能设置为"untyped"

如何在不泄漏内存的情况下释放此指针?

4

1 回答 1

0

删除@- 获取局部变量的地址:

function CreateBitmap(W, H: Double): Double;
var
  TBM: TBitmap;
begin
  TBM := TBitmap.Create(Floor(W), Floor(H));
  CreateBitmap := Double(Integer(TBM));
end;

function DestroyBitmap(Handle: Double);
var
  bmp: TBitmap;
begin
  bmp := TBitmap(integer(Handle));
  bmp.Free;
end;
于 2013-06-11T02:19:40.580 回答