这是对我的另一个问题的扩展。我有一个应该与 Game Maker 接口的 DLL,它使用Double
和PChar
.
我必须将我的对象转换为Double
s(引用)才能与 Game Maker 来回传递。
我有 2 个课程:TBitmap
和TWindow
. 各具IBlittable
。这意味着在IBlittable
s 上运行的方法可以同时使用这两种方法,但问题是:
这是我创建它们的方法:
{Creation of Bitmaps and Windows}
function CreateBitmap(W, H: Double): Double; STDCall;
var
TBM: TBitmap;
begin
TBM := TBitmap.Create(Floor(W), Floor(H));
CreateBitmap := Double(Integer(TBM));
end;
function GetWindowByHWND(Handle: Double): Double; STDCall;
var
ReturnVal: TWindow;
begin
ReturnVal := TWindow.Create(Floor(Handle));
GetWindowByHWND := Double(Integer(ReturnVal));
end;
以下是我尝试对它们进行操作的方式:
function SetPixel(Handle, X, Y, Color: Double): Double; STDCall;
var
<stuff>
begin
Blittable := IBlittable(Floor(Handle)); //This!
<set the pixel>
SetPixel := 0;
end;
当我将其Floor(Handle)
转换为 IBlittable 时,它会出现段错误并崩溃。
当我将它转换为以前的状态(TWindow 或 TBitmap)时,它可以正常工作。我该如何规避这个问题?
我真的不想专门重写所有方法(那将是非常多余和蹩脚的)