Главная страница
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.5 MB
Время: 0.022 c
2-1206078470
SKIPtr
2008-03-21 08:47
2008.04.13
нужно выполнить перерисовку компонента


2-1206006900
Aleksandr
2008-03-20 12:55
2008.04.13
ID folder


2-1205927037
asdf2
2008-03-19 14:43
2008.04.13
Как сделать MultiSelect в TCheckListBox?


3-1195462325
zdm
2007-11-19 11:52
2008.04.13
Кириллица в данных о пользователе Firebird


2-1205562445
aleko
2008-03-15 09:27
2008.04.13
Caption динамического TMenuItem