Форум — Ответы     (  К темам )
 ?  Fantom: Не могу понять... (TList из ДЛЛ) (20-05-2003 12:30:45)
Очередная лажа при работе с чужой ДЛЛ(кто помнит — с все тойже Делфевой).

Вызываю ф-ию из ДЛЛ-ки: typedef int (__stdcall *FunK1)(unsigned char, unsigned сhar, TList*&, TList*&, TList*&, HWND);
Родное описание ее на Делфи выглядит: FunK1 = Function (t,k:byte; var _K1,_K2,_K3:TList; Handd:HWND):integer;stdcall;

Загружаю ДЛЛ-ку.
Вываю ф-ию, получаю определенные значения в TList-ах (все ОК).
Выгружаю ДЛЛ-ку.

А дальше лажа:
1) после выгрузки ДЛЛ-ки TList-ы недоступны (такое впечатление, что данные были в адресном пространстве ДЛЛ-ки и пох_ерились вместе с выгрузкой ее из памяти). Проблемму решил за счет перепресвоения значений в другие три TList-а.
Хотя сам подобные задачи уже писал, с точно такой же схемой и данные были доступны.
2) самое галимое, что по выходу из ф-ии в кот. вся эта обработка происходила — выдается матюк(ексес виолейшн), затыкается на строке: 0057B418 8B4AF8 mov ecx, [edx-0x08].

Кто понимает в чем я не прав, в чем мои ошибки подскажите плиз!
Зараннее благодарен за помощь!
 Павел (20-05-2003 14:37:14)
Так а зачаем вам после вызова функции выгружать dll ?
(то загружать, то выгружать)
Загружайте ее один раз при старте программы,
а выгружайте при завершении, например в деструкторе
главной формы.
 Fantom (20-05-2003 15:19:28)
Суть не в том когда выгружать ДЛЛ, хотя какой смысл мне ее грузить в начале, а потом по выходу из программы выгружать если я могу и не воспользоваться при работе этой ф-ией, что особо и не меняет дела. Проблемма в пункте №2(см.выше).