Delphi - 创建一个使用GDI +并与c ++ Builder兼容的包

时间:2017-02-28 21:35:28

标签: c++ delphi header gdi+ generated

我正在使用RAD Studio XE7编写Delphi包,其中有几个类可能使用GDI +绘制图形元素。只要我将它与Delphi项目一起使用,这段代码就可以正常运行。

但是我还需要创建使用相同包的C ++项目。我注意到匹配单元包含一些GDI +代码的所有.hpp标头必须手动修改,以便在编译器生成之后在C ++中使用,这非常烦人。它好像用于Delphi和C ++的GDI +使用2个完全不同的代码,其中一个与另一个无关,并且一种语言中的声明在另一种语言中没有对应,反之亦然。所以简单的Delphi函数就像

一样
function GetGDIPlusPen: TGpPen; inline;

在自动生成的.hpp中导出不正确,因为Delphi中的TGpPen在C ++中称为Gdiplus :: Pen,为此,我的.hpp中提供的函数完全不兼容,必须手动更正 - 或者注释为在最恶劣的情况下停用。

我知道有几个编译器指令可以影响the.hpp文件内容的生成,但是我从来没有找到过这样的指令来禁止在.hpp文件中生成给定的函数,并用另一个来替换他的声明。 c ++编译器可能会理解。如果有人知道这样的指示,请告诉我。

我还看了一下其他人如何在互联网上的几个库中解决这个问题,似乎许多开发人员更喜欢编写他们自己的GDI +包装器,而不是使用由Winapi.Gdipapi和Winapi.Gdipobj提供的默认单元。 RAD工作室。

那么,是否有一种简单的方法可以通知编译器在使用GDI +的自动生成的.hpp文件中生成正确的C ++代码?或者唯一的解决方案是围绕GDI +编写自己的包装器?如何使用GDI +不干扰我的.hpp文件的生成?

此致

------------------更新-------------------- < / p>

我意识到我的问题可能有点模糊。事实上,我有几个包含一些GDI +代码的类,有几个单元。当生成.hpp时,某些功能如例如

TWColor = record
    ...
    function GetGDIPlusPen: TGpPen; inline;
    ...

在.hpp文件中以这种方式生成:

struct DECLSPEC_DRECORD TWColor
{
    ...
    Winapi::Gdipobj::TGPSolidBrush* __fastcall GetGDIPlusSolidBrush(void);
    ...

当然这不起作用。所以我尝试做的是:

  1. 通知编译器不应在.hpp文件中生成GetGDIPlusSolidBrush()函数
  2. 将此功能替换为其他自定义定义,例如
  3. struct DECLSPEC_DRECORD TWColor
    {
        ...
        Gdiplus::SolidBrush* __fastcall GetGDIPlusSolidBrush(void);
        ...
    

    问题是:有没有办法做到这一点?

    此致

0 个答案:

没有答案