![]() |
|
![]() ![]() ![]() |
|
artsb |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Всем привет.
Сделал тестирующую программу. Решил некоторые функции вынести в dll. Одна из них читает файл теста в вектор. Прототип:
В программе вызываю её так:
При старте всё нормально. Работает правильно. А когда закрываю программу, выдаёт сообщение: "В программе ... была найдена ошибка. Отправть отчёт об ошибке?" (3 раза ![]() Потом решил в OnClose формы добавить строку:
На этой строчке вылетает ошибка: External exception EEFFACE. Если нажать ОК, а потом опять попробовать закрыть программу, выдаёт ошибку: Invalid pointer operation. При создании dll, в комментарии было написано:
Подключил библиотеку MEMMGR.LIB ко всем своим dll и exe, кинул BORLNDMM.DLL в папку с программой. Но не помогло. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||||||
|
|||||||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
Имхо в библиотеки nвоей рекомендую избавиться от AnsiString в пользу char *
|
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
в интерфейсе либы объекты классов. Либа и экзешник компиляются или разными компилляторами или одним, но с разными настройками. Получаешь разные CRT при создании и удалении объектов и все падает. В общем виде задача решения не имеет. Либо Один компилятор одной версии с одинаковыми настройками, либо без классов в интерфейсе |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
а как быть с vector? Как передать указатель на vector в dll?
Добавлено через 1 минуту и 28 секунд Так и есть. Всё делаю в Builder 6. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
||||
|
||||
ama_kid |
|
||||||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||||||
|
|||||||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
В этом.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
artsb |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Ну я никаких настроек не менял. Может они сами...
Это я привёл прототип функции из dll без тела. А вся dll выглядит так:
Вызываю её так, как писал ранее. Сейчас поработал с проектом, теперь при закрытии программы выдаёт такую ошибку: Abnormal program termination. Это сообщение отредактировал(а) artsb - 23.5.2008, 22:22 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||||
|
|||||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
||||
|
||||
ama_kid |
|
||||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||||
|
|||||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 10 Всего: 12 |
Всем добрый!
Надеюсь artsb не обитеся, что я пишу в его топике, просто новый создавать не хотелось, чтобы не продить темы по DLL. У меня несколько вопросов: 1. Все Вы знаете icq менеджер miranda. программа написана так, что весь ее функционал хранится в библионтеках dll. Кто знает, каким образом осуществляется постоение окна настроек библиотеки? Просто у меня есть несколько соображений по этому поводу, но очень сомневаюсь в них. 2. Так же всем известно, что есть библионтеки которые отвечают за работу самой программы и являются критичными (проверка защиты программы), другие модули не являются важными (всплывающее окно). Каким образом можно осуществить такое разделение модулей? Заранее спасибо. -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
vikaz, создай свой топик
![]() -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Нет. ![]() ama_kid, сделал как вы советовали: добавил везде __stdcall. Теперь при закрытии программы выскакивает ошибка: Abnormal program termination. После чего программа закрывается. Так как правильно передать указатель на вектор в dll? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
Далее, надо бы проверить один момент - при декларировании функции через __declspec(dllexport) возможно надо при импорте объявлять указатель через __declspec(dllimport), по крайней мере MSDN это рекомендует.Если честно, я никогда в DLL не передавал объекты, поэтому тут могу только посоветовать сделать немного по-другому: передать в DLL указатель на функцию из вызывающей программы, которая и будет вызываться в DLL и заполнять вектор... -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
В этом случае нет толку от dll. :( Сделал так: Убрал из программы всё что связано с dll и просто скопировал функции из dll в *.cpp. Теперь ошибка "Abnormal program termination" возникает на строке delete ls;. Вот кусок кода:
Причём если поставить перед "delete ls" строку "ls->Clear();", ошибка возникает на ней. Если же убрать эти строки - всё работает нормально. Странно, почему она не хочет удалять ls? Это сообщение отредактировал(а) artsb - 24.5.2008, 19:58 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |