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

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

DLL


Страницы:   1 2

tp ©   (2004-08-20 11:58:00) 

Всем здравствуйте! Написал DLL. Статически работает без проблем, а при динамическом вызове FeeeLibrary выдает исключение:Project C:\Project\MyProject.exe raised too many consecutive exceptions:
'access violation at 0x00000000: read of address 0x00000000:'. В exe-шнике убрал все вызовы функциий, оставил только загрузку и выгрузку. Где мои грабли.


Digitman   (2004-08-20 15:24:00) [1]


> tp   (20.08.04 15:20) [23]


то что ты вешаешь лапшу на уши, упрямо приводя здесь код, заведомо не соответствующий вызывающему проблему, было ясно изначально


tp   (2004-08-20 15:20:00) [2]

Проблема нашлась: Заремив все, что можно, потерял ShareMem.
Извините, что отнял массу времени. Спасибо всем.


Digitman   (2004-08-20 15:07:00) [3]


> Там переменные


где "там" ? в предложенном коде никаких новых переменных по отн. к твоему коду нет !


> просто не выполняется


и не ожидалось, а это тоже немаловажная инф-ция

...

итак , ты утверждаешь, что попытка выгрузки заведомо гарантированно загруженной "абсолютно пустой" библиотеки

library Project1;
begin
end.

приводит вот к таким плачевным результатам ? да или нет ?


tp   (2004-08-20 14:54:00) [4]


> ну как угодно
> значит так в помощи нуждаешься !

Там переменные и т.п., которые не относятся к DLL.


> мне это пока абсолютно ни о чем не говорит, я хочу увидеть
> результаты работы именно того кода, что я предложил исполнить
> на твоей машине, а не какие-то досужие домыслы


А я и написал


> H > 0 @Deini <> nil @Ini <> nil



> FreeLibrary(H)вообще не заканчивается. После довольно-таки
> длительного раздумья вылетает окно CPU и exceptions, и так
> до бесконечности пока не оборвешь по Ctrl+F2


т. е.


> on e:exception do
>      ShowMessage(e.classname + ' ' + e.message);


просто не выполняется.


Digitman   (2004-08-20 14:42:00) [5]


> tp   (20.08.04 14:34) [18]


> Просто не хотелось переписывать FormCreate и FormDestrroy


ну как угодно
значит так в помощи нуждаешься !


> Хочу напомнть, что при статической загрузке все работает
> нормально


мне это пока абсолютно ни о чем не говорит, я хочу увидеть результаты работы именно того кода, что япредложил исполнить на твоей машине, а не какие-то досужие домыслы


tp   (2004-08-20 14:36:00) [6]

Хочу напомнть, что при статической загрузке все работает нормально.


tp   (2004-08-20 14:34:00) [7]

H > 0 @Deini <> nil @Ini <> nil
Просто не хотелось переписывать FormCreate и FormDestrroy.
FreeLibrary(H)вообще не заканчивается. После довольно-таки длительного раздумья вылетает окно CPU и exceptions, и так до бесконечности пока не оборвешь по Ctrl+F2


Digitman   (2004-08-20 14:17:00) [8]

выполни этот код, о результатах увиденных сообщений на экране и последовательности их возникновения доложишь с точностью до буквы

var
Ini: TIni;
Deini: TDeini;
H: THandle;

procedure TForm1.FormCreate(Sender: TObject);
begin
H := LoadLibrary('cardp.dll');
if H > 0 then
  begin
   Ini := GetProcAddress(H, 'Ini');
   if @Ini = nil then
     ShowMessage(SysErrorMessage(GetLastError));
   Deini := GetProcAddress(H, 'Deini');
   if @Deini = nil then
     ShowMessage(SysErrorMessage(GetLastError));
  end
else
  ShowMessage(SysErrorMessage(GetLastError));
...
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if H > 0 then
  try
   if not FreeLibrary(H) then
     ShowMessage(SysErrorMessage(GetLastError));
  except
    on e:exception do
     ShowMessage(e.classname + ' ' + e.message);
  end;
end;


Суслик   (2004-08-20 14:16:00) [9]

надо бы после всех вызовов api функций проверять результаты - при ошибках они исключения не генерят


Goffman   (2004-08-20 14:14:00) [10]

Может он библиотеку найти не может


tp   (2004-08-20 14:06:00) [11]

...
try
  TIni = procedure;
  TDeini = procedure;
...
var
 Ini: TIni;
 Deini: TDeini;
 H: THandle;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
 H := LoadLibrary('cardp.dll');
 @Ini := GetProcAddress(H, 'Ini');
 @Deini := GetProcAddress(H, 'Deini');
 Ini;
 ...
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Deini;
 FreeLibrary(H);
end;


Digitman   (2004-08-20 13:43:00) [12]

так, стоп ..

ты хочешь сказать, что текст проекта вот в таком виде

library Project1;

uses
SysUtils,
Classes;

{$R *.res}

begin
end;

вызывает ту же ошибку при дин.загрузке ?

тогда приводи код из ехе-проекта : где и как ты производишь дин.загрузку


Digitman   (2004-08-20 13:39:00) [13]


> tp   (20.08.04 13:28) [11]


нет, ты точно русский язык не понимаешь)

диктую большими буквами : приведи сюда для анализа полный текст модуля frmMain.pas!


tp   (2004-08-20 13:28:00) [14]

library Project1;

uses
SysUtils,
Classes{,
Forms,
frmMain in 'frmMain.pas' {MainForm}};

{$R *.res}

{procedure Ini;
begin
MainForm:= TMainForm.Create(nil);
end;

procedure Deini;
begin
MainForm.Free;
end;

exports
Ini,
Deini;
}
begin
end;

Увы...


Digitman   (2004-08-20 13:10:00) [15]


> tp   (20.08.04 13:05) [9]


ты русский язык понимаешь ? анализ источника ошибки ведет в модуль, в котором описана форма (неважно, создается она или нет !) !


tp   (2004-08-20 13:05:00) [16]


> Digitman ©   (20.08.04 12:56) [7]

В exe-шнике убрал все вызовы функциий(Ini, Deini), оставил только загрузку и выгрузку. Форма не создается.


Smithson   (2004-08-20 12:56:00) [17]

Иди в поиск, форма в DLL тема называлась, кажется.


Digitman   (2004-08-20 12:56:00) [18]


> tp   (20.08.04 12:51) [5]


ошибка - в frmMain.pas


Мастер   (2004-08-20 12:54:00) [19]

Супер!


tp   (2004-08-20 12:51:00) [20]

library Project1;

uses
 SysUtils,
 Classes,
 Forms,
 frmMain in 'frmMain.pas' {MainForm};

{$R *.res}

procedure Ini;
begin
 MainForm:= TMainForm.Create(nil);
end;

procedure Deini;
begin
 MainForm.Free;
end;

exports
 Ini,
 Deini;

begin
end;


Страницы:   1 2

Наверх

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