Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по DLL [D6, Win2k, WinXP]


_sulent ©   (2004-11-30 09:02:00) 

Приветсвую, может быть вопрос не по конференции, но решил обратиться сюда.
Возникла такая проблема, что-то не могу понять. создаю DLL из программы гружу ее, вроде загружается, но стоит мне только убить ее, все хана... выдает ошибку, что мол что-то с памятью моей не то! В общем ошибка обращения к памяти. Что может быть такое?
причем если я его не убиваю этот Handle, то при закрытии программы опять такая ошибка появляется!
делаю так:

   
LibHandle := LoadLibrary(pChar(ExtractFilePath(Application.ExeName)+'DLL\Reports\'+SR.Name));
   index := FindNext(SR);
   if LibHandle > 32 then begin
     SetLength(LibHandles, length(LibHandles)+1);
     @Tproc := getProcAddress(LibHandles[length(LibHandles)-1], 'describe_report');
     Tproc(List);
     RepList.Items.Add(List.Strings[1]);
   end;
   FreeLibrary(LibHandle);


_sulent   (2004-11-30 10:50:00) [1]

Там это я просто экспериментировал, а по-идее у меня все было так:

index := FindFirst(pChar(ExtractFilePath(Application.ExeName)+'DLL\Reports\*.dll',faAnyFile, SR);
while index=0 do begin
LibHandle := LoadLibrary(pChar(ExtractFilePath(Application.ExeName)+'DLL\Reports\'+SR.Name));
if LibHandle > 32 then begin
 @Tproc := getProcAddress(LibHandle, 'describe_report');
 TProc(List);
end;
end;

Что-то типа того


Verg   (2004-11-30 09:44:00) [2]

Несколько вопросиков:


> LibHandle := LoadLibrary(pChar(ExtractFilePath(Application.ExeName)+'DLL\Reports\'+SR.Name));
>    index := FindNext(SR);
>    if LibHandle > 32 then begin // В чем смысл сравнения ?
>      SetLength(LibHandles, length(LibHandles)+1); // Массив расширен, но LibHandle  туда не вписан
>      @Tproc := getProcAddress(LibHandles[length(LibHandles)-1], // В какой библиотеке ты ищешь процедуру ?
> 'describe_report');
>      Tproc(List);
>      RepList.Items.Add(List.Strings[1]);
>    end;
>    FreeLibrary(LibHandle);


TUser   (2004-11-30 09:35:00) [3]

И все-таки, код dll'ки покажи.


_sulent   (2004-11-30 09:26:00) [4]

ShareMem у меня как раз присутсвует, а сама DLL нормально работает, никаких проблем нет... проверял запуская саму программу, работает нормально...


KSergey   (2004-11-30 09:13:00) [5]

SahreMem, похоже, как всегда отсутствует


Digitman   (2004-11-30 09:09:00) [6]

у тебя ошибка в самой DLL


Наверх

Титульная страница Поиск, карта сайта Написать письмо