Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1203812771
Mailer
2008-02-24 03:26
2008.04.13
Как работать с архивами *.tar.bz2 без дополнительных dll и


2-1205598021
DJ_UZer
2008-03-15 19:20
2008.04.13
Подсказка


15-1204280231
Palladin
2008-02-29 13:17
2008.04.13
Вот вам и неограниченность объектов ядра в совр. Windows


2-1205596742
Roman_A
2008-03-15 18:59
2008.04.13
Что быстрее CopyFile? или через буфер?


11-1187713261
Dy1
2007-08-21 20:21
2008.04.13
как использовать ExecuteConsoleAppIORedirect ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский