0

Game Maker とのインターフェース用の DLL を書いています。(ゲームメーカーのみの取り扱いDoubleです。)

ここに関数があります:

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);
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 に答える