2013-06-11 2 views
0

Я пишу DLL для взаимодействия с Game Maker. (Game Maker имеет дело только в Double с.)FreePascal: бесплатный указатель на класс

Вот функция:

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; 

Как освободить этот двойник? Я пытался делать

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

Но поскольку тип указателя не может быть определена, Blittable (IBlittable) не может быть установлен в "untyped".

Как освободить этот указатель без утечки памяти?

ответ

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; 
+0

Отлично! Спасибо. –

Смежные вопросы