我想创建一个与 Delphi 和其他语言(主要是 C++)一起使用的 DLL 插件。如何以 C++ 和 Delphi 友好的方式传递位图?它可以只是 Delphi TBitmap 的句柄吗?C++ 程序应该能够使用 WinApi 对其进行解码,对吧?
问问题
1402 次
1 回答
10
您不能传递 DelphiTBitmap
对象,因为这仅对 Delphi 代码有意义。你需要传递的是一个HBITMAP
, 一个 Windows 位图的句柄。
DelphiTBitmap
类只是 Windows 位图的包装器,可以提供HBITMAP
句柄。您需要注意的是这些句柄的所有权。
如果你有一个 Delphi TBitmap
,你可以HBITMAP
通过调用 a 的ReleaseHandle
方法来获得一个TBitmap
。返回的句柄ReleaseHandle
不再由TBitmap
您想要的对象拥有和管理。您将该句柄传递给 C++ 代码并让它成为所有者。它负责处理该句柄。
的文档ReleaseHandle
说:
返回位图的句柄,以便 TBitmap 对象不再知道该句柄。
使用ReleaseHandle解除位图与位图句柄的关联。当您需要将位图句柄提供给将承担(或销毁)位图句柄的例程或对象时,请使用它。
在另一个方向,您的 Delphi 代码将从HBITMAP
C++ 代码接收并获得所有权。通过分配给实例的Handle
属性来做到这一点。TBitmap
细节会因语言而异,但无论如何,所有人都可以处理HBITMAP
.
于 2013-03-25T21:34:35.323 回答