Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.13;
Скачать: CL | DM;

Вниз

Ошибка при использовании 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 вся ветка

Текущий архив: 2008.04.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
2-1205831391
Megatron
2008-03-18 12:09
2008.04.13
Передача параметров


2-1206008011
Sedd
2008-03-20 13:13
2008.04.13
Нужен совет


15-1204034089
sds
2008-02-26 16:54
2008.04.13
Есть программа которая работает с БД.


15-1204035351
avptt
2008-02-26 17:15
2008.04.13
не могу понять


2-1205858255
timekiller
2008-03-18 19:37
2008.04.13
XML, Ноды, Рекурсия?





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