5

我想创建一个与 Delphi 和其他语言(主要是 C++)一起使用的 DLL 插件。如何以 C++ 和 Delphi 友好的方式传递位图?它可以只是 Delphi TBitmap 的句柄吗?C++ 程序应该能够使用 WinApi 对其进行解码,对吧?

4

1 回答 1

10

您不能传递 DelphiTBitmap对象,因为这仅对 Delphi 代码有意义。你需要传递的是一个HBITMAP, 一个 Windows 位图的句柄。

DelphiTBitmap类只是 Windows 位图的包装器,可以提供HBITMAP句柄。您需要注意的是这些句柄的所有权。

如果你有一个 Delphi TBitmap,你可以HBITMAP通过调用 a 的ReleaseHandle方法来获得一个TBitmap。返回的句柄ReleaseHandle不再由TBitmap您想要的对象拥有和管理。您将该句柄传递给 C++ 代码并让它成为所有者。它负责处理该句柄。

的文档ReleaseHandle说:

返回位图的句柄,以便 TBitmap 对象不再知道该句柄。

使用ReleaseHandle解除位图与位图句柄的关联。当您需要将位图句柄提供给将承担(或销毁)位图句柄的例程或对象时,请使用它。

在另一个方向,您的 Delphi 代码将从HBITMAPC++ 代码接收并获得所有权。通过分配给实例的Handle属性来做到这一点。TBitmap

细节会因语言而异,但无论如何,所有人都可以处理HBITMAP.

于 2013-03-25T21:34:35.323 回答