Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Dll в MS VS2005 - app в Borland 5, что делать? 
:(
    Опции темы
Mhael
Дата 20.3.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.3.2008

Репутация: нет
Всего: нет



Вопрос наверное именно сюда. Если нет, киньте плиз ссылку где обсуждалось.
Я весьма начинающий программист, а время поджимает, поэтому решил попросить совета на форуме. Итак:
Имеется Dll и приложение, работающее с этой длл. Написаны на Борланде 5-ом. Все работало. Потом длл переписали на MS VS 2005 на С++. Использовались СТЛ (векторы, строки, runtime_error). Также добавлены были пару функций и работа еще нескольких изменена, ну и по мелочи всякое, сделали size_t вместо int, поправили пару структур.. Теперь встал вопрос о работе приложения(его не меняли) с этой новой длл.
У кого были подобные опыты - возможно ли это в принципе, на что обратить внимание, какие могут меня ожидать проблемы например с СТЛ..? Меня смущают исключения, к тому же обрабатываемые с помощью runtime_error - как поймет это Борланд и правильно ли будет работать, даже если приложение скомпилится? Может проще потратить время и совершить необходимые изменения в длл в Борланде и не работать в этом проекте с Вижуалкой вообще?
PM MAIL   Вверх
korian
Дата 21.3.2008, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



для библиотек, надо писать компиляторо-независимую обертку, которая будет платформо-зависимой.
переводить все типы в те, которые будет понимать данныя платформа.
для Win можно переводить все в простые типы и указатели на них. можна перевести в COM объекты и работать с ними.
обработку ошибок осуществлять через возвращение функцией кода ошибки или установкой глабальной переменной с кодом. или опять же COM объекты.
вообщем-то все библиотеки C/C++ компиляторо-зависимы. поэтому, в общем случае, они не стыкуются для разных компиляторов и даже для разных настроек одного и того же компилятора.

PM   Вверх
Vyacheslav
Дата 21.3.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Вообще то не вижу больших проблем, если линковка будет динамической и конечно у Вас из dll не экспортируются классы.  Экспорт классов - вещь тоже решаемая, но нужно соответственно проектировать. Возможная проблема - это использование stl. У  Microsoft у stl  при работе с dll даже с родными приложениями есть проблемы. По крайне мере это касалось VS7
И при разработке dll в этом случае нужно придерживаться следующих правил: 
1) исключения возникающие в dll должны перехватываться в самой dll. Это приведет к тому, что придется вернуться к архаичному способу определения успеха-неуспеха посредством возвращаемого результата. Хотя могу и ошибаться в данном вопросе.
2) Выделяемая память должна  уничтожаться там где она выделена. Нпример, если выделена в dll, а хочется уничтожить ее в коде приложения, то  нужно вызвать из dll соотвествующую функцию, которая это сделает.
Соотвественно, в dll нельзя уничтожать память, выделенную в приложении.

Да, кстати. Надеюсь Вы использовали не managed C++?

Добавлено @ 12:46
Цитата(Mhael @  20.3.2008,  17:48 Найти цитируемый пост)
 Может проще потратить время и совершить необходимые изменения в длл в Борланде и не работать в этом проекте с Вижуалкой вообще? 

Это будет наиболее правильное решение. Кто мешает точно также добавть туда STL?



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Mhael
Дата 21.3.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.3.2008

Репутация: нет
Всего: нет



Вот в хэдере от вижуаловской длл-ки, с которым будет работать и приложение:
struct Nex : public std::runtime_error
{
int ErrorCode;
int Invoker;
int Reserved;
char* Msg;
Nex(int iErrorCode, int iInvoker, int iReserved, char* iMsg)
:
std::runtime_error("..."),
ErrorCode(iErrorCode), Invoker(iInvoker), Reserved(iReserved), Msg(iMsg)
{ }
};
Это структура заполняется данными при исключительной ситуации. А вот как ее заполняют(в длл-ке):
функция..
try {//..
catch (const Nex &E)
{
MCS_SetLastError(hn, E.ErrorCode, E.Invoker, E.Reserved);
MCS_Deinit(hn);
return false;
}
У меня есть сомнение будет ли это все работать в Борланде, мне говорил один чел, что произойтет некое бинарное несоответствие(или несовместимость) между кодом исключений в Вижуале и в Борланде? Vyacheslav имел это в виду? Я в силу малого опыта не способен осознать будет там что-то плохое или нет, а поскольку очень мало времени осталось на доработку, мне не хочется потратить пару дней на переделку и длл-ки и прилаги а потом убедиться, что ничего путного не выйдет и нужно переписывать либо длл на Борланд либо прилагу на Вижуал. Кто может мне данный вопрос раскрыть?
Экспортируются только функции, по крайней мере в хэдере только функции я видел с параметром extern "C" __declspec(dllexport)
И еще небольшой вопрос - может ли у Борланда быть проблема с #pragma once ? Мне заменить ее в хедере на #infndef HEDER_H -  #define HEDER_H  и в конце файла #endif ?

Это сообщение отредактировал(а) Mhael - 21.3.2008, 17:39
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.