Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 1.644 c
1-1093011809
Lord de Mon
2004-08-20 18:23
2004.09.05
Что такое inherited


1-1093035765
Adil
2004-08-21 01:02
2004.09.05
PopupMenu Items


14-1092636996
Реактор
2004-08-16 10:16
2004.09.05
Проблемы с высвобождением памяти


1-1092884302
FastByte
2004-08-19 06:58
2004.09.05
Картинки в Excel


14-1092742868
DelphiNew
2004-08-17 15:41
2004.09.05
расчёт Возмещение НДС





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский