Access Violation и DLL
От: MashaS  
Дата: 01.06.05 05:43
Оценка:
Доброе утро All. Проблема в следующем.
Сделана dll для работы с RaveReports. Единственная функция экспортная для создания DataModule-я, остальные вызываются через интерфейс.
Из основного приложения в определенный момент вызывается функция печати, которая загружает dll, пользует её функции и потом после печати отчета выгружает её.
Первый раз все срабатывает на ура, дальше со второго или любого другого раза валятся ошибки типа Access Vioation, системы появления ошибок выявить не удалось.
Вот кусок кода из функции основного приложения:

try
dllHandle:=GetModuleHandle(pchar(ExtractFilePath(Application.ExeName)+'\DLL\Print.dll'));
if (dllHandle=0) then
dllHandle:=LoadLibrary(pchar(ExtractFilePath(Application.ExeName)+'\DLL\Print.dll'));
try
if dllHandle=0 then Exit;
@MyDllCreate:=GetProcAddress(dllHandle,'CreateDMPrint');
if (@MyDllCreate=nil) then Exit;
dmP:=MyDllCreate(Application.Handle);
if (dmP.GetInterface(IPrintInterface,IPrint)) then begin
// открываем файл проекта
tmp_str := ReturnPrintProjectName(doc_table,doc_type);
if not IPrint.OpenProject(tmp_str) then begin
Showmessage(ReturnErrMsg(11,tmp_str));
Exit;
end;
{ формируем отчет, передаем данные и все такое }
...
Sleep(10);
// вызов сформированного отчета
IPrint.CreateReport(print_type);
end;

finally
dmD.CloseConnection;
IPrint:=nil;
dmP.Free;
dmP:=nil;
FreeLibrary(dllHandle);
Sleep(10);
end;

except
Showmessage('Ошибка');
end;

Мучаюсь довольно давно. Сведущие, откликнитесь, пожалуйста !
Эх...
Re: Access Violation и DLL
От: byur Россия http://yurybuluy.blogspot.com/
Дата: 01.06.05 06:30
Оценка:
Здравствуйте, MashaS, Вы писали:

MS>Доброе утро All. Проблема в следующем.

MS>Сделана dll для работы с RaveReports. Единственная функция экспортная для создания DataModule-я, остальные вызываются через интерфейс.
MS>Из основного приложения в определенный момент вызывается функция печати, которая загружает dll, пользует её функции и потом после печати отчета выгружает её.
MS>Первый раз все срабатывает на ура, дальше со второго или любого другого раза валятся ошибки типа Access Vioation, системы появления ошибок выявить не удалось.
MS>Вот кусок кода из функции основного приложения:


Нужно проверить наличие в uses модуля Sharemem как в вызывающей проге, так и в dll
Re[2]: Access Violation и DLL
От: MashaS  
Дата: 01.06.05 06:48
Оценка:
Здравствуйте, byur, Вы писали:

B>Нужно проверить наличие в uses модуля Sharemem как в вызывающей проге, так и в dll


Спасибо за помощь, мне это действительно помогло. Просто несмотря на то, что про подключение ShareMem неоднократно уже читала на форумах, мне почему то казалось что проблема в другом.. ) с dll этой бьюсь уже не первый день, с восприятием наверное проблемы
Эх...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.