Текущий архив: 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.5 MB
Время: 0.031 c