Форум: "WinAPI";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];
ВнизОшибка при использовании GetModuleHandle Найти похожие ветки
← →
Интересующийся © (2007-08-11 12:19) [0]Всем доброе время суток
Пытаюсь вызвать функцию из своей DLL при помощи GetModuleHandle, а она мне ошибку выдает :(
Подскажите ПЛИЗ что я делаю не так
Type
TStartingProc=function: Boolean;stdcall;
Var
NameDll32:HMODULE;
StartingProc:TStartingProc;
Starting:Boolean;
Begin
NameDll32:=GetModuleHandle("NameDll32.dll");
If NameDll32<>0 then
Begin
@StartingProc:=GetProcAddress(NameDll32,"Starting");
If Assigned(StartingProc) Then Starting:=StartingProc;
End;
End;
PS
как я понял в блок If прога вообще не входит по причине ошибке возникающей после строчки NameDll32:=GetModuleHandle("NameDll32.dll");
← →
Leonid Troyanovsky © (2007-08-11 12:46) [1]
> Интересующийся © (11.08.07 12:19)
> If NameDll32<>0 then
Win32Check(NameDll32<>0);
--
Regards, LVT.
← →
Интересующийся © (2007-08-11 13:15) [2]Насчет Win32Check не понял, можно по подробней
← →
trubin © (2007-08-11 15:18) [3]
> Насчет Win32Check не понял, можно по подробней
Функция в SysUtils - если NameDll32 = 0, то вызовет ф-ю RaiseLastWin32Error, которая возбудит исключение и выдаст сообщение об ошибке. См Ф1 + сусУтилс.пас ;)
← →
Интересующийся © (2007-08-11 16:23) [4]> Функция в SysUtils - если NameDll32 = 0, то вызовет ф-ю RaiseLastWin32Error, которая возбудит исключение и выдаст сообщение об ошибке. См Ф1 + сусУтилс.пас ;)
Ну насчет SysUtils это я понял, и насчет для чего она нужна смотрел по F1
Я непонял зачем ее использовать в коде который не вызывает ощибки о которой необходимо предупреждать пользователя
Тот код который я привел брался из стандартного примера вызова функции из Kernel32.dll и работает прекрасно, в моем же случае блок кода If... отказывается работать (как я понимаю по какой-то причине код неможет получить указатель моей DLL)
В настоящее время я подключаю DLL не денамически, но меня такой способ не устраивает, поскольку по условиям согласно которым разрабатывается приложение DLL может отсутствовать
PS
Мне нужно динамически загрузить процедуры и функции из моей DLL в мое приложение. Если у кого есть рабочие примеры ПЛИЗ поделитесь кодом
← →
trubin © (2007-08-11 16:56) [5]The GetModuleHandle function returns a module handle for the specified module if the file has been mapped into the address space of the calling process.
LoadLibrary делал?
← →
trubin © (2007-08-11 16:58) [6]
> Тот код который я привел брался из стандартного примера
> вызова функции из Kernel32.dll и работает прекрасно, в моем
> же случае блок кода If... отказывается работать (как я понимаю
> по какой-то причине код неможет получить указатель моей
> DLL)
Kernel32.dll присутствует в любом процессе, поэтому пример и работает
← →
Интересующийся © (2007-08-11 18:35) [7]> trubin © (11.08.07 16:56) [5]
> trubin © (11.08.07 16:58) [6]
О LoadLibrary я и не подумал :(
Вставил, все ЗАРАБОТАЛО!
За подсказку РЕСПЕКТ :)
← →
Leonid Troyanovsky © (2007-08-12 09:38) [8]
> Интересующийся © (11.08.07 16:23) [4]
> Я непонял зачем ее использовать в коде который не вызывает
> ощибки о которой необходимо предупреждать пользователя
Как же не надо предупреждать?
Вот, даже нас не ты предупредил.
Большинство win32 API - функции (в понимании паскаля),
возвращаемый результат которых принято анализировать,
в т.ч. и с использованием GetLastError.
Т.е., если б ты указал хотя бы код ошибки, то выявил проблему
не через 2.5 часа, а минут через 20.
Так что, прошу любить и пользовать Win32Check.
--
Regards, LVT.
← →
Интересующийся © (2007-08-12 14:31) [9]> Leonid Troyanovsky © (12.08.07 09:38) [8]
> Т.е., если б ты указал хотя бы код ошибки, то выявил проблему
> не через 2.5 часа, а минут через 20.
> Так что, прошу любить и пользовать Win32Check
На счет Win32Check ВЫ полностью правы :)
Если сам о LoadLibrary додымал проблема вообще решилась бы за 10 минут, но к сожалению... :(
← →
Leonid Troyanovsky © (2007-08-12 19:44) [10]
> Интересующийся © (12.08.07 14:31) [9]
> Если сам о LoadLibrary додымал проблема вообще решилась
> бы за 10 минут, но к сожалению... :(
Соглашусь, что прочтение
http://msdn2.microsoft.com/en-us/library/ms683199.aspx
может лишь насторожить:
The module must have been loaded by the calling process.
Но, Win32Check выскажется, IMHO, гораздо определенней.
Так что, время можно отмерять в секундах.
В любом случае, Win32Check д.б. правилом.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c