hinstDLL := LoadLibrary(pchar(dir+'dll_change.dll'));
if hinstDLL<32 then
begin
ShowMessage('ошибка загрузки библиотеки ');
Close; // как варианты имя_формы.close. // exit
end
else
........
Программа не выходит !
Код:
Если выдаётся это сообщение, то программа всё равно пускается. Хотя мне надо ,чтобы она завершила свою работу.
Сама программа пускается и сразу прячется в сис.трей. Может что-нибудь с этим связано ? :/
Код:
halt(0);
или
ExitProcess(0);
или
Application.Terminate;
или
ExitProcess(0);
или
Application.Terminate;
Или попробуй FreeLibrary(hinstDLL) - хуже все равно не будет :D
а почему именно:
Код:
if hinstDLL<32
ведь вызов LoadLibrary неудачен, если hinstDLL=0.
Цитата: kosfiz
SerMax
а почему именно:
ведь вызов LoadLibrary неудачен, если hinstDLL=0.
а почему именно:
Код:
if hinstDLL<32
ведь вызов LoadLibrary неудачен, если hinstDLL=0.
взято либо из MSDN, либо из другой программы. Да и вроде сам чтиал ,что так надо. :/ .
а при
Код:
halt(0);
вызывется обработчик OnCLose формы ?? Потому что
Код:
FreeLibrary(hinstDLL)
описано именно там.
А так верно подсказали, работает ! :).
P.S. очень нравится этот форум. Помытсья не успел, как в ветке уже дискуссия пошла :) .Супер !
вот цитата из msdn:
Цитата:
LoadLibrary
The LoadLibrary function maps the specified executable module into the address space of the calling process.
For additional load options, use the LoadLibraryEx function.
HMODULE LoadLibrary(
LPCTSTR lpFileName
);
Parameters
lpFileName
[in] Pointer to a null-terminated string that names the executable module (either a .dll or .exe file). The name specified is the file name of the module and is not related to the name stored in the library module itself, as specified by the LIBRARY keyword in the module-definition (.def) file.
If the string specifies a path but the file does not exist in the specified directory, the function fails. When specifying a path, be sure to use backslashes (\), not forward slashes (/).
If the string does not specify a path, the function uses a standard search strategy to find the file. See the Remarks for more information.
Return Values
If the function succeeds, the return value is a handle to the module.
If the function fails, the return value is NULL.
[quote=SerMax]а при
Код:
halt(0);
вызывется обработчик OnCLose формы ?? Потому что
Код:
FreeLibrary(hinstDLL)
описано именно там.[/quote]
нет. к тому же если вызов LoadLibrary неудачен, то не вижу смысла вызывать FreeLibrary(вызов этой функции нужен если вызов LoadLibrary удался).
Описание
function LoadLibrary(LibFileName: PChar): THandle;
Загpужает поименованный модуль библиотеки.
Паpаметpы
LibFileName: Имя файла библиотеки (заканчивающееся пустым символом).
Возвpащаемое значение
В случае успешного завеpшения - идентификатоp экземпляpа модуля библиотеки (значение, больше 32); если нет, то его значение меньше 32 и является одним из следующих: (0) нет памяти; (5) попытка связать задачу; (11) невеpный файл EXE; (12) пpикладная задача из OS/2; (13) пpикладная задача из DOS 4.0; (14) невеpный тип EXE; (15) незащищенный pежим.
и как думаете, откуда взято ? С самого
codenet.ru
:)
Цитата:
Windows Me/98/95: If you are using LoadLibrary to load a module that contains a resource whose numeric identifier is greater than 0x7FFF, LoadLibrary fails. If you are attempting to load a 16-bit DLL directly from 32-bit code, LoadLibrary fails. If you are attempting to load a DLL whose subsystem version is greater than 4.0, LoadLibrary fails. If your DllMain function tries to call the Unicode version of a function, LoadLibrary fails.
Ну работает же, и я как-то на это не сильно жалуюсь :) . За информацию спасибо !
Цитата: kosfiz
вот цитата из msdn
MSDN конечно хорошо, но красивее и понятнее будет пользоваться константой INVALID_HANDLE_VALUE, о которой говорится в хелпе по WIn32 API. :)