Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизДинамическая загрузка DLL Найти похожие ветки
← →
maxic (2003-06-26 16:40) [0]Загружаю библиотеку, вызываю функции - все нормально. Когда пытаюсь выгрузить ее - ошибка "access violation" и как всегда "память не может быть write" :)
Подскажите, что не так?
type
TInit = procedure;
var
Init: TInit;
DllHandle: THandle;
begin
DllHandle:=LoadLibrary(PChar(DllFile));
if DllHandle >= 32 then
begin
@Init:=GetProcAddress(DllHandle, "Init");
if not Assigned(DialerInit) then
begin
ShowMessage("Не удалось вызвать процедуру Init.");
exit;
end;
Init;
FreeLibrary(DllHandle);
end;
end;
← →
Skier (2003-06-26 16:42) [1]>maxic (26.06.03 16:40)
как объявлена Init в DLL ? Код !
← →
maxic (2003-06-26 16:43) [2]procedure Init; export;
← →
Skier (2003-06-26 16:47) [3]в DLL :
procedure Init; stdcall;
begin
ShowMessage("Hello, world !");
end;
//.......................
exports
Init index 1;
в приложении :
type
TInit = procedure; stdcall;
var
Init: TInit;
DllHandle: THandle;
begin
DllHandle:=LoadLibrary(PChar(DllFile));
if DllHandle >= 32 then
begin
@Init:=GetProcAddress(DllHandle, PChar("Init"));
if not Assigned(DialerInit) then
begin
ShowMessage("Не удалось вызвать процедуру Init.");
exit;
end;
Init;
FreeLibrary(DllHandle);
end;
end;
Не спасёт ?
← →
maxic (2003-06-26 16:51) [4]Попробуем :)
← →
Юрий Федоров (2003-06-26 16:53) [5]Возможно, баг в библиотеке в процедуре Init
И еще :
if not Assigned(DialerInit) then
begin
ShowMessage("Не удалось вызвать процедуру Init.");
exit;
end;
Нет точки входа в процедуру, выходим.
А кто будет библиотеку выгружать ?
← →
Skier (2003-06-26 16:53) [6]Oops !
И ещё : почему пытаешься получить Init, а проверяешь на DialerInit (if not Assigned(DialerInit)
) ?
← →
Skier (2003-06-26 17:00) [7]>maxic
И хорошо было бы использовать try-finally-end
← →
maxic (2003-06-26 17:06) [8]> И ещё : почему пытаешься получить Init, а проверяешь на DialerInit (if not Assigned(DialerInit)) ?
Это опетачка, как и не выгрузка при ошибке...
← →
Skier (2003-06-26 17:11) [9]>maxic (26.06.03 17:06)
> Это опетачка
Осторожней, батенька. Программирование штука точная, все
опечатки настораживают...:)
← →
Digitman (2003-06-26 17:11) [10]приведи полный код Init() ... и код разделов инициализации/финализации модулей в составе DLL
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c