Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: CL | DM;

Вниз

DLL   Найти похожие ветки 

 
tp   (2004-08-20 11:58) [0]

Всем здравствуйте! Написал 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 12:03) [1]


> Где мои грабли


в сарае, где ж еще ... не в горнице же ...


> Написал DLL


не дописал ты ее ... с ошибками она ... исправляй их - и сарай твой превратится в горницу)


 
tp   (2004-08-20 12:24) [2]


> Digitman ©   (20.08.04 12:03) [1]

Я заценил юмор


 
Smithson   (2004-08-20 12:28) [3]

Так это не юмор. А без кода инициализации-финализации dll ничего больше тебе и не скажут.


 
Digitman ©   (2004-08-20 12:29) [4]


> tp   (20.08.04 12:24) [2]


> заценил юмор


но выводов не сделал


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

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;


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

Супер!


 
Digitman ©   (2004-08-20 12:56) [7]


> tp   (20.08.04 12:51) [5]


ошибка - в frmMain.pas


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

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


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


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

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


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


> tp   (20.08.04 13:05) [9]


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


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

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:39) [12]


> tp   (20.08.04 13:28) [11]


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

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


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

так, стоп ..

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

library Project1;

uses
SysUtils,
Classes;

{$R *.res}

begin
end;

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

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


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

...
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;


 
Goffman ©   (2004-08-20 14:14) [15]

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


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

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


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

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

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;


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

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


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

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


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


> tp   (20.08.04 14:34) [18]


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


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


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


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


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


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

Там переменные и т.п., которые не относятся к 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 15:07) [22]


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


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


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


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

...

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

library Project1;
begin
end.

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


 
tp   (2004-08-20 15:20) [23]

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


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


> tp   (20.08.04 15:20) [23]


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



Страницы: 1 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.023 c
14-1092834583
panov
2004-08-18 17:09
2004.09.05
Версия FreeBSD


14-1091941670
Виктор П
2004-08-08 09:07
2004.09.05
Опрос: Рейтинг форум-клиентов.


3-1092292069
happyandry
2004-08-12 10:27
2004.09.05
Как изменить цвет выделенной строки в DBGrid ?


14-1092397485
nasty
2004-08-13 15:44
2004.09.05
люди добрые! есть ли в процессорах амд технология ммх?


14-1092802196
Родитель
2004-08-18 08:09
2004.09.05
в чем прикол-то?