![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при работе с DLL [D7, WinXP]
Denis © (2005-02-16 12:11:00)Приветствую.
Такая проблема. Есть DLL одна из функций которой создает и открывает форму. В момент открытия и закрытия формы, во время работы с ней вызывающее приложение не проявляет никаких эмоций. А в момент закрытия самого вызывающего приложения все валится с ошибкой "...Память не может быть read." Если же не обращаться к данной функции - все нормально.
Вызываемая форма работает с MSSQL через ADO.
Подскажите, в какую сторону смотреть? Если нужен код - приведу.
Denis (2005-02-16 14:19:00) [1]Так. По всей видимости, толку от нашего диалога не будет... Потому как тут наверное прийдется выкладывать код как длл, так и хост приложения, чтобы разобраться где кто порылся...
Наверное покопаюсь я и вернусь позже с более конкретными вопросами. Хотя и сейчас от совета не отказался бы...
Denis (2005-02-16 13:56:00) [2]форма - справочник организаций.
используется многими модулями системы, потому в длл.
при открытии все ADOquery, ADOcommand подключаются к созданному Connection.
Пользователь работает с базой, все обычно - поиск, добавление, удаление, редактирование. При закрытии все указанные объекты отсоединяются от Connection, который затем уничтожается.
Ни какой модуль конкретно не называет. Говорит, мол, проект Admin.exe raised ... Access violation ...
Digitman (2005-02-16 13:41:00) [3]а что в форме творится ?
на какой модуль, который якобы вызвал такую ошибку, ссылается программа при выводе сообщения об ошибке ?
Denis (2005-02-16 13:37:00) [4]нашел. эта процедура таки напрямую вызывается, а не из функции. извиняюсь, перепутал. :(
это из модуля, где собраны все прототипы:
procedure showOrganization; stdcall; External SuSystem;
SUSystem - строковая константа.
Digitman (2005-02-16 13:27:00) [5]покажи прототип
Denis (2005-02-16 13:18:00) [6]гружу статически.
есть dcu-файл, который я прописываю в uses. он содержит прототипы функций. та, о которй говорим состоит из одной строки и вызывает упомянутую процедуру. Не спрашивайте почему - не я это писал, но мне приходится с этим разбираться...
кстати, заметил, что на моей машине, где изначально разрабатывалось хост-приложение, ошибок нет.
на той, где разрабатывалась dll и, похоже, на остальных в отделе - эта ошибка. :-\
Digitman (2005-02-16 12:38:00) [7]
> одна из функций которой ..
> функция запускает следующую процедуру
а где собственно функция-то ? экспортируемая ?
как грузишь ДЛЛ - статически или динамически ?
показывай как ты обращаешься к ДЛЛ в хост-приложении ..
Denis (2005-02-16 12:31:00) [8]функция запускает следующую процедуру:
procedure showOrganization; stdcall; export;
begin
Connect;
FormOrgan:=TFormOrgan.Create(nil);
FormOrgan.ShowModal;
FormOrgan.Free;
Disconnect;
end;
где
Procedure Connect;
begin
Connection:=TAdoConnection.Create(nil);
Connection.ConnectionString:=SUConStr;
Connection.LoginPrompt:=false;
Connection.CursorLocation:=clUseServer;
Connection.DefaultDatabase:=DefaultBase;
Connection.Open;
end;
Procedure Disconnect;
begin
Connection.Close;
Connection.Free;
end;
Denis (2005-02-16 12:30:00) [9]функция запускает следующую процедуру:
procedure showOrganization; stdcall; export;
begin
Connect;
FormOrgan:=TFormOrgan.Create(nil);
FormOrgan.ShowModal;
FormOrgan.Free;
Disconnect;
end;
где
Procedure Connect;
begin
Connection:=TAdoConnection.Create(nil);
Connection.ConnectionString:=SUConStr;
Connection.LoginPrompt:=false;
Connection.CursorLocation:=clUseServer;
Connection.DefaultDatabase:=DefaultBase;
Connection.Open;
end;
Procedure Disconnect;
begin
Connection.Close;
Connection.Free;
end;
Digitman (2005-02-16 12:20:00) [10]
> в какую сторону смотреть?
в сторону ошибок в твоем коде
clickmaker (2005-02-16 12:17:00) [11]что делает функция? приведи описание