C ++ Wrapper .lib реализован в Pascal - PullRequest
1 голос
/ 20 октября 2011

У меня есть проект C ++ Builder, который использует эту библиотеку http://www.torry.net/authorsmore.php?id=1881 (Шифр).

  • Включены исходные файлы (.hpp / .pas)
  • .lib файл включен

Похоже, что это библиотека C ++ Builder, но я хочу написать оболочку на C ++, чтобы использовать ее в программах на C ++ и C # (проще говоря, сделатьDLL этой библиотеки).

Моя проблема в том, что я новичок и не знаю, как это сделать.

Должен ли я включить файл lib в свой проект и объявитьвсе функции в extern, чтобы обернуть его?

Мне нужна помощь, спасибо.

1 Ответ

2 голосов
/ 20 октября 2011

Вам нужно будет сопоставлять вызовы API, и это становится излишним и скучным. Однако, мне кажется, что работа оправдана, потому что ваша DLL может быть использована практически в любом месте на данном этапе. Цель состоит в том, чтобы обернуть проект C ++ Builder, поскольку он компилирует файлы .pas, которые удобны для компилятора вне мира C ++ Builder / Delphi.

По моему опыту, написание функций "C", которые принимают непрозрачный указатель, является наиболее гибким подходом:

typedef void * MYHANDLE;

extern "C" MYHANDLE CreateMyObject(void)
{
    MyCppObject * obj = new MyCppObject();
    return static_cast<MYHANDLE>(obj);
}

/* Calls to your other C++ methods as well */

extern "C" void DeleteMyObject(MYHANDLE obj)
{
    MyCppObject * ptr = static_cast<MyCppObject*>(obj);
    delete ptr;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...