Форум: "Система";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизDllProc Найти похожие ветки
← →
SeF (2003-01-13 11:19) [0]Грузится системным загрузчиком в АП запускаемого учу
моя Dll a dllproc не вызывается... как бороться???
гружу через "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs"
← →
paul_shmakov (2003-01-13 16:29) [1]скорее всего у вас delphi 6 без второго сервиспака - я как-то долго возился с этой проблемой в чужой dll, пока не обнаружил ошибку в процедуре _StartLib в system.pas.
второй сервиспак это исправляет.
← →
SeF (2003-01-13 22:00) [2]попробую...
← →
SeF (2003-01-13 23:38) [3]помогло, но не совсем. т.е. если делаю просто LoadLibrary то все ok, но если ее загружает система то выдается ошибка.
P.S. по DLL_PROCESS_ATTACH просто создается поток в котором в цикле Beep.
← →
paul_shmakov (2003-01-14 12:35) [4]ok, тестируем. вам нужен DebugView от Марка Руссиновича (www.sysinternals.com).
скомпилируйте слудующие два файла и запустите loader.exe. если в DebugView будет после этого две записи (DLL_PROCESS_ATTACH и DLL_PROCESS_DETACH), то все у вас нормально.
первый файл. это dll.
// test.dpr
// compile with dcc32 test.dpr
library test;
uses Windows;
procedure DLLEntryPoint(Reason: Integer);
begin
case Reason of
DLL_PROCESS_ATTACH: OutputDebugString("DLL_PROCESS_ATTACH"#13#10);
DLL_THREAD_ATTACH: OutputDebugString("DLL_THREAD_ATTACH"#13#10);
DLL_THREAD_DETACH: OutputDebugString("DLL_THREAD_DETACH"#13#10);
DLL_PROCESS_DETACH: OutputDebugString("DLL_PROCESS_DETACH"#13#10);
end;
end;
begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
второй файл. loader.exe
// loader.dpr
// compile with dcc32 loader.dpr
program loader;
{$APPTYPE CONSOLE}
uses Windows;
begin
FreeLibrary(LoadLibrary("test.dll"));
end.
← →
paul_shmakov (2003-01-14 12:47) [5]теперь второй тест - на статическое подключение. опять два файла. сделать нужно все тоже самое, только теперь в DebugView дожно быть три записи: DLL_PROCESS_ATTACH, func и DLL_PROCESS_DETACH.
// test2.dpr
// compile with dcc32 test2.dpr
library test2;
uses Windows;
procedure func;
begin
OutputDebugString("func"#13#10);
end;
procedure DLLEntryPoint(Reason: Integer);
begin
case Reason of
DLL_PROCESS_ATTACH: OutputDebugString("DLL_PROCESS_ATTACH"#13#10);
DLL_THREAD_ATTACH: OutputDebugString("DLL_THREAD_ATTACH"#13#10);
DLL_THREAD_DETACH: OutputDebugString("DLL_THREAD_DETACH"#13#10);
DLL_PROCESS_DETACH: OutputDebugString("DLL_PROCESS_DETACH"#13#10);
end;
end;
exports func;
begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
// loader2.dpr
// compile with dcc32 loader2.dpr
program loader2;
{$APPTYPE CONSOLE}
uses Windows;
procedure func; external "test2.dll";
begin
func;
end.
← →
SeF (2003-01-14 22:23) [6]
> paul_shmakov © (14.01.03 12:35)
оба теста на ура, без ошибок.
но с моей библиотекой:
1 http://seff.pisem.net/1.jpg сообщение об ошибке;
2 http://seff.pisem.net/2.jpg EventLog;
ps если библиотека грузится в прогрпмму написаную не на delphi то все ok.
код библиотеки:
...
var th:MyThread;
procedure run_;
begin
th:=MyThread.Create(false);
th.FreeOnTerminate:=true;
end;
procedure dllentry(reason:integer);
begin
case reason of
DLL_PROCESS_DETACH:th.Terminate;
DLL_PROCESS_ATTACH:run_;
DLL_THREAD_ATTACH:exit;
DLL_THREAD_DETACH:exit;
end;
end;
begin
dllproc:=@dllentry;
DLLEntry (DLL_PROCESS_ATTACH);
end.
execute потока:
procedure MyThread.Execute;
begin
while not Terminated do
begin
sleep(1000);
beep;
end;
end;
← →
paul_shmakov (2003-01-15 03:01) [7]эта, картинки - 404 :)
← →
SeF (2003-01-15 14:00) [8]забыл выложить :)
← →
SeF (2003-01-15 14:01) [9]Выложил...
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c