На работе есть программа, написанная на Borland C++ Builder 6, модули для неё в виде dll люди пишут на том же Билдере.
Технология очень давно используемая, никто основную программу переписывать не будет.
Хотел улучшить процесс написания своих dll с более современным IDE и компилятором gcc, столкнулся с проблемой обилия борландских нестандартных типов.
Ладно, всякие bool можно на char заменить, а вот что передавать на выход, когда программа хочет от моей dll получить AnsiString или когда она мне этот AnsiString присылает?
Может кто-нибудь сталкивался с подобным?
Пока что единственный выход, который мне видится — это написать на том же Билдере обёртку — ещё одну dll, которая вызывает мою со стандартными типами, а в основное приложение передаёт уже борландские. Но это будет неудобно, к каждой новой dll отдельную обёртку собирать...
Здравствуйте, ka-5, Вы писали:
K5>Здравствуйте.
K5>На работе есть программа, написанная на Borland C++ Builder 6, модули для неё в виде dll люди пишут на том же Билдере.
K5>Пока что единственный выход, который мне видится — это написать на том же Билдере обёртку — ещё одну dll, которая вызывает мою со стандартными типами, а в основное приложение передаёт уже борландские. Но это будет неудобно, к каждой новой dll отдельную обёртку собирать...
ну напиши на c++ эмуляцию строчки борландовской, там формат тупой, как пробка.
Здравствуйте, Jack128, Вы писали:
J>Я в курсе. Там делов то, пару операторов переопределить, да деструктор. Человеку ж не надо все методы AnsiString реализовывать.
А память будешь выделять на GCC-стороне, если придется там ее конструировать ? А освобождать ее будет Borland-EXE, которому она достанется ? Что-то мне это сомнительно.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Jack128, Вы писали:
J>>Я в курсе. Там делов то, пару операторов переопределить, да деструктор. Человеку ж не надо все методы AnsiString реализовывать.
PD>А память будешь выделять на GCC-стороне, если придется там ее конструировать ? А освобождать ее будет Borland-EXE, которому она достанется ? Что-то мне это сомнительно.
память выделяется в специальной длл borlndmm.dll, именно используя функции из этой библиотеки нужно выделять и освобождать память.
Здравствуйте, ka-5, Вы писали:
K5>Пока что единственный выход, который мне видится — это написать на том же Билдере обёртку — ещё одну dll, которая вызывает мою со стандартными типами, а в основное приложение передаёт уже борландские. Но это будет неудобно, к каждой новой dll отдельную обёртку собирать...
Обычно так и делают, только обёртки пишут не вручную, а генерируют.
Здравствуйте, Jack128, Вы писали:
PD>>А память будешь выделять на GCC-стороне, если придется там ее конструировать ? А освобождать ее будет Borland-EXE, которому она достанется ? Что-то мне это сомнительно. J>память выделяется в специальной длл borlndmm.dll, именно используя функции из этой библиотеки нужно выделять и освобождать память.
Тогда как минимум на стороне C++ надо использовать не new, и даже не malloc, а импортировать оттуда функции этой библиотеки.