|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.05.2009, 22:20 | #1 |
Регистрация: 13.04.2008
Сообщений: 6
|
Повторный вызов функции из dll
Здравствуйте! Возникла следующая проблема:
В программе вызываются функции из подключенных динамически dll. Перед непосредственным вызовом функции грузится нужная длл, выполянется функция, после чего dll сразу освобождается. (dll написана мною) модификатор вызова WINAPI: typedef void (WINAPI cfunc(TDiagramBlock *)); (пробовал модификаторы __cdecl, __import, __stdcall...) при первом вызове функции все отлично работает, но при повторном ошибка Invalid Pointer Operation... где-то падает указатель. Пробовал загружать все длл в начале программы и выгружать в конце, все равно падает. Программа строит диаграммы из блоков и расчитывает их... то есть сами функции блоков храняться в длл... При нажатии на кнопку Расчет программа расчитывает дерево блоков для каждого вызвывая функцию из длл... первый расчет работает отлично....при повторном ошибки((((( Копал по всему интернету, ничего вразумительного не нашел...((( |
15.05.2009, 01:54 | #2 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
А код посмотреть можно?
Вы, наверное, где-то создаете какой-то объект и не удаляете его. При повторном запуске вы снова его создаете. Хотя чего гадать на кофейной гуще? Код в студию!
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
15.05.2009, 16:57 | #3 |
Регистрация: 13.04.2008
Сообщений: 6
|
На самом деле проект огромный... вот тогда пример функции, в которой вызывается сама функция dll:
Код:
Вот функция в dll: Код:
Код:
А и главный проект и dll компилируются без Runtime packeges. ( А также без Use dynamic RTL и Use debug libraries) |
15.05.2009, 17:03 | #4 |
Регистрация: 13.04.2008
Сообщений: 6
|
А и вот еще какой момент... если допустим использовать функцию из dll в которую ничего не передается и которая просто возвращает значение int то все работает корректно...без падений... пробовал передавать в dll по ссылочке TDiagramBlock * &B и String & Params...не падает при закрытии программы....но все еще падает при повторном вызове функции расчета....
А также вот еще какой факт: если строку Params не менять...то программа падает при втором расчете сразу, если же внести изменения в нее, то программа не падает при расчетах, но падает при выходе из программы!!!!! Последний раз редактировалось Smertnik; 15.05.2009 в 17:16. |
15.05.2009, 17:23 | #5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Здается мне что параметр B неверно передается.
Что будет если дважды передать один и тот же параметр и теми же значениями? Вот это Цитата:
I'm learning to live...
|
|
15.05.2009, 22:18 | #6 |
Регистрация: 13.04.2008
Сообщений: 6
|
Я эту проверочку дописал уже после того как нашел ошибку ... и без проверки ругался тоже... я тоже думаю что дело в указателе на объект класса TDiagramBlock.... но мне просто обязательно надо передавать его в длл...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание и вызов библиотеки dll | DM_bite | Помощь студентам | 3 | 15.06.2010 12:47 |
Вызов произвольной функции из DLL | Роман Радер | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 31 | 05.03.2010 22:35 |
Вызов функции из dll-ки | VVVadim | Общие вопросы Delphi | 2 | 28.04.2009 10:37 |
Вызов функции | MarSeON | PHP | 2 | 01.08.2008 20:22 |
вызов из dll не ShowModal. | Roof | Общие вопросы Delphi | 7 | 25.07.2008 15:22 |