![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Здравствуйте.
Проблема заключается в следующем: имеется DLL, из которой экспортируется функция DllGetClassObject (на сколько я понял она возвращает адрес объекта класса, который сама же и создаёт; исходников DLL нет, поэтому точно сказать не могу что возвращает эта функция, и говорю как сам думаю), пытаюсь в программе подключить эту библиотеку и взять адрес объекта - весь блок по подключению и изъятию адреса отрабатывает (FormShow), и уже после него получаю ошибку "privileged instruction...". Может кто что подскажет по этому поводу? За ранее спасибо. Ниже привожу пример кода:
Это сообщение отредактировал(а) Viy_2007 - 30.6.2008, 20:15 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
есть предположение, что в библиотеке сидит COM-сервер...
-------------------- There are always someone smarter than you... |
|||
|
||||
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
А поподробнее можно, а то я в этом деле новичёк? Я точно могу сказать что в ней находится 4 функции на экспорт:
DllUnregisterServer DllRegisterServer DllCanUnloadNow DllGetClassObject а вот для чего они нужны и что с ними делать ума не приложу... Буду чрезмерно бладгодарен примеру Это сообщение отредактировал(а) Viy_2007 - 30.6.2008, 20:32 |
|||
|
||||
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Судя по всему предложения иссякли...
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
regsvr32.exe
Импорт ActiveX |
|||
|
||||
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Спасибо, будем искать...
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Чего искать?
regsrv32 лежит у тебя в system32 Зарегестрируй свою библиотечку, а потом импортируй её, как обычный ActiveX контрол. Когда напишешь программу, доделай кусок, который при старте будет проверять наличие активикса в системе, и если нет, то дёргать DllRegisterServer из твоей dll. При деинсталляции программы, дёргай DllUnregisterServer. Остальные функции дёргать не надо - дельфи сама сделает враппер для активикса при импорте. |
|||
|
||||
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Да нет, где лежит regsrv32 и что с ним делать я и сам знаю (да и по поводу регистрации через DllRegisterServer тоже уже догадался )), проблема у меня возникла при импорте ActiveX - на соклько я понял это нужно делать через Component -> Import ActiveX Control? Но там нет моего компонента, хотя я либу уже зарегил в системе... что делать в таком случае?
Это сообщение отредактировал(а) Viy_2007 - 1.7.2008, 22:19 |
|||
|
||||
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Мне кажется, что здесь нужно копать в сторону описания интерфейса... По этому поводу нашёл исходник, где реализация либы оч похожа на мой случай, и переделал прогу использующую её под свой проект. Ниже привожу код:
Вроде всё должно работать, но при запуске выдаёт ошибку "Interface not supported"... |
|||
|
||||
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Snowy, помоги пожалуйста разобраться что по чём...
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Если не попадает в список ActiveX, то нужно читать документацию.
Ибо нужно знать интерфейсы. Если сделали работу через объект, то тут нужно работать с интерфейсами. Раз это не ActiveX, то тут два варианта: 1. Найти документацию с описанием интерфейсов. 2. Выкинуть её нафиг. Пытаться описать этот объект, как собственный класс - бесполезная затея. В твоей программе данного класса нет и не будет - он существует только в dll. |
|||
|
||||
| Viy_2007 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Да, второй вариант мне безусловно нравится, но будем думать дальше... Спасибо за помощь
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |