Delphi — Создание пакета, который использует GDI + и совместим с C ++ Builder

Я пишу пакет Delphi для RAD Studio XE7, в котором несколько классов могут рисовать графические элементы с помощью GDI +. Этот код работает хорошо, пока я использую его с проектами Delphi.

Однако мне также нужно создавать проекты C ++, которые используют тот же пакет. Я заметил, что все заголовки .hpp, для которых соответствующий модуль содержит некоторый код GDI +, должны быть вручную изменены для использования в C ++ после генерации компилятором, что очень раздражает. Как будто в GDI + для Delphi и для C ++ используется 2 совершенно разных кода, один из которых не имеет ничего общего с другим, и для которых объявления на одном языке не соответствуют на другом и наоборот. Так что простая функция Delphi, как

function GetGDIPlusPen: TGpPen; inline;

неправильно экспортируется в автоматически сгенерированном .hpp, потому что TGpPen в Delphi называется Gdiplus :: Pen в C ++, и для этого функция, представленная в моем .hpp, полностью несовместима и должна быть исправлена ​​вручную — или прокомментирована для деактивации в худший случай.

Я знаю, что существует несколько директив компилятора, влияющих на генерацию содержимого файла .hpp, однако я никогда не находил такой директивы, которая запрещала бы генерирование данной функции в файле .hpp и заменяла его объявление другим, что компилятор c ++ может понять. Если кто-нибудь знает такие директивы, пожалуйста, дайте мне знать.

Я также взглянул на то, как другие люди решали эту проблему в нескольких библиотеках через Интернет. Похоже, что многие разработчики предпочитают писать свою собственную оболочку GDI + вместо использования стандартных модулей Winapi.Gdipapi и Winapi.Gdipobj, предоставленных студией RAD.

Итак, есть ли простой способ уведомить компилятор о создании правильного кода C ++ в автоматически сгенерированных файлах .hpp, в которых используется GDI +? Или единственное решение — написать свою собственную обертку вокруг GDI +? Как я могу использовать GDI +, чтобы не мешать генерации моих файлов .hpp?

С уважением

—————— ОБНОВИТЬ ———————

Я понимаю, что мой вопрос может быть немного неясным. На самом деле у меня есть несколько классов, которые содержат некоторый код GDI +, в нескольких единицах. Когда генерируется .hpp, некоторые функции, такие как, например,

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

генерируются таким образом в файле .hpp:

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

Конечно, это не сработает. Итак, что я пытаюсь сделать, это:

  1. Сообщите компилятору, что функция GetGDIPlusSolidBrush () не должна создаваться внутри файла .hpp.
  2. Замените эту функцию другим пользовательским определением, например, например.
struct DECLSPEC_DRECORD TWColor
{
...
Gdiplus::SolidBrush* __fastcall GetGDIPlusSolidBrush(void);
...

Вопрос: есть ли способ сделать это?

С уважением

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]