![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить Handle статически (LIB) загружаемой DLL? [D6, D7, WinXP]
Vlad2 © (2006-01-26 18:12:00)Имя импортируемой функции - переменная. Чтобы обращаться к ней через GetProcAddress, нужен Handle. GetModuleHandle не работает. При динамической загрузке проблем не возникает.
Как при статической загрузке DLL обратиться к функции, не описывая её имени в виде идентификатора?
Спасибо.
Vlad2 (2006-01-27 13:26:00) [1]Спасибо за внимание и помощь, Игорь!
Вчера, помучавшись экспериментами с опциями проекта, установил, что GetModuleHandle работает только тогда, когда в проект включены все пакаджи, независимо от того, нужны они тебе или нет. Т.е., BDS 2006 ещё сырой, несмотря на установленный SP1 - одним словом - превью он и есть превью, натыкался уже и на другие дефекты. Думаю (проверять уже некогда), под старой версией этой ошибки не было бы. У меня все имена DLL (включая раздел Exports вывода TDump) совпадают.
Благодарен за отклик. Успехов!
Игорь Шевченко (2006-01-27 11:35:00) [2]Vlad2 (26.01.06 19:35) [6]
> А какая часть вывода Tdump может помочь?
Раздел Exports, относящийся к интересующей DLL
> . Обидно, что только вчера это работало
Значит, все-таки дело не в GetModuleHandle, а в чем-то еще.
Я бы убедился, что DLL с нужным именем присутствует в разделе Exports вывода TDump, затем убедился бы, что в GetModuleHandle передается именно то имя, которое присутствует в Exports
Vlad2 (2006-01-26 19:35:00) [3]Спасибо, Игорь,
к сожалению, затруднит. Начал работать в Borland Developer Studio 2006, да ещё под С++Builder. На соответствующих форумах - молчание, а на этом (пожалуй, лучшем) не раз находил ответы, да и сам тоже отвечал.
В проект добавляю LIB, созданный одновременно с DLL. И всё. А потом по ходу программы в любом месте обращаюсь к GetModuleHandle. Обидно, что только вчера это работало, а сегодня создал с нуля новый проект с этими же модулями, и никак. Почему не может найти то, что есть?
А какая часть вывода Tdump может помочь?
Игорь Шевченко (2006-01-26 19:04:00) [4]Vlad2 (26.01.06 18:56) [4]
Код в студию не затруднит ? И заодно часть вывода Tdump
Vlad2 (2006-01-26 18:56:00) [5]Там без пути, голое имя, фйл *.dll в текущей директории, а GetLastError всё равно говорит ""Не найден указанный модуль" :((.
Игорь Шевченко (2006-01-26 18:50:00) [6]GetModuleHandle ('kernel32.dll') работает. Эта DLL статически линкуется. Может, надо путь убрать из имени ?
Vlad2 (2006-01-26 18:39:00) [7]Что-то у меня не получается. Если использую LoadLibrary - нет проблем, а если подлинковываю соответствующий LIB, то хэндл остаётся нулём.
Игорь Шевченко (2006-01-26 18:16:00) [8]
> GetModuleHandle не работает
Работает