regsvr32
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- dima
- Житель
- Сообщения: 690
- Зарегистрирован: 19 фев 2003, 19:26
- Откуда: Хабаровск->Toronto
regsvr32
VC++ 6.0 sp3
Все работало раньше по след схеме. Наш DLL сожержит имплементацию каких-то классов, он линкуется с нашим OCX, OCX используется нашим EXE. Setup во время установки все копировал, потом регистрировал OCX и успешно заканчивался.
Теперь мы вынуждены использовать еще один DLL (open source) - Pathlan.dll и линковать его с нашем старом DLL. Мы сами компилируем Pathlan.dll, но во время setup-а при регистрации нашего старого OCX LoadLibrary получает ошибку 0xC0000090.
Самое непонятное - после неуспешной регистрации нашим setup-ом наш OCX успешно регистрируется через regsvr32.exe
Что делать ?
Все работало раньше по след схеме. Наш DLL сожержит имплементацию каких-то классов, он линкуется с нашим OCX, OCX используется нашим EXE. Setup во время установки все копировал, потом регистрировал OCX и успешно заканчивался.
Теперь мы вынуждены использовать еще один DLL (open source) - Pathlan.dll и линковать его с нашем старом DLL. Мы сами компилируем Pathlan.dll, но во время setup-а при регистрации нашего старого OCX LoadLibrary получает ошибку 0xC0000090.
Самое непонятное - после неуспешной регистрации нашим setup-ом наш OCX успешно регистрируется через regsvr32.exe
Что делать ?
-
- Завсегдатай
- Сообщения: 278
- Зарегистрирован: 03 мар 2003, 08:55
- Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA
Re: regsvr32
[quote="dima"][/quote]
Если мне не изменяет память, RegisterServer или RegisterObject функция DLL вызывается при регистрации - вся премудрость.
1. Вы что именно делаете, как именно регистрируете? Какая функция "высунута наружу" из DLL? Как насчёт попробовать её из маленького тестового EXE вызывать? LoadLibrary, понеслась...
2. Как насчёт посмотреть исходный текст regsvr32, где-то в SDK? кажись, там, но...
3. Что значит "линковать" DLL с другим DLL? Такое в природе возможно, если не dynamically (само слово DLL...)? Или с LIB? А функция RegisterXXXX не перекрывается при линовке?
Если мне не изменяет память, RegisterServer или RegisterObject функция DLL вызывается при регистрации - вся премудрость.
1. Вы что именно делаете, как именно регистрируете? Какая функция "высунута наружу" из DLL? Как насчёт попробовать её из маленького тестового EXE вызывать? LoadLibrary, понеслась...
2. Как насчёт посмотреть исходный текст regsvr32, где-то в SDK? кажись, там, но...
3. Что значит "линковать" DLL с другим DLL? Такое в природе возможно, если не dynamically (само слово DLL...)? Или с LIB? А функция RegisterXXXX не перекрывается при линовке?
- dima
- Житель
- Сообщения: 690
- Зарегистрирован: 19 фев 2003, 19:26
- Откуда: Хабаровск->Toronto
Re: regsvr32
мы в setup вставили вызов нашего спец EXE, который регистрирует наши компоненты и пишет лог файл об успехе или код ошибки принеуспехе. Код регистрации был скопирован с исходников regsvr32.exeWoozy писал(а):Если мне не изменяет память, RegisterServer или RegisterObject функция DLL вызывается при регистрации - вся премудрость.dima писал(а):
1. Вы что именно делаете, как именно регистрируете? Какая функция "высунута наружу" из DLL? Как насчёт попробовать её из маленького тестового EXE вызывать? LoadLibrary, понеслась...
2. Как насчёт посмотреть исходный текст regsvr32, где-то в SDK? кажись, там, но...
3. Что значит "линковать" DLL с другим DLL? Такое в природе возможно, если не dynamically (само слово DLL...)? Или с LIB? А функция RegisterXXXX не перекрывается при линовке?
"Линковать dll". Возможно я выразился не правильно. Смысл - DLL экспортирует классы, другая DLL использует эти классы и имеет имя первой DLL (c расширенеем LIB конечно-же) в своем imake файле в "разделе" внешних библиотек.
Про маленький exe - идея не плохая .....
-
- Завсегдатай
- Сообщения: 278
- Зарегистрирован: 03 мар 2003, 08:55
- Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA
Re: regsvr32
Да, но вы это вроде уже сделали, воспроизведя regsvr32... Что внутри происходит, под отладчиком?dima писал(а):Про маленький exe - идея не плохая .....
- dima
- Житель
- Сообщения: 690
- Зарегистрирован: 19 фев 2003, 19:26
- Откуда: Хабаровск->Toronto
Re: regsvr32
в Debug setup-а нет. а так все регистрируется без проблем ....Woozy писал(а):Да, но вы это вроде уже сделали, воспроизведя regsvr32... Что внутри происходит, под отладчиком?dima писал(а):Про маленький exe - идея не плохая .....
-
- Завсегдатай
- Сообщения: 278
- Зарегистрирован: 03 мар 2003, 08:55
- Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA
Re: regsvr32
Непонятно, что не даёт добраться до кода под отладчиком, если можно менять сам код и "оживить" его для Debug.dima писал(а):в Debug setup-а нет. а так все регистрируется без проблем ....
- dima
- Житель
- Сообщения: 690
- Зарегистрирован: 19 фев 2003, 19:26
- Откуда: Хабаровск->Toronto
Re: regsvr32
Проблему решили вот как.Woozy писал(а):Непонятно, что не даёт добраться до кода под отладчиком, если можно менять сам код и "оживить" его для Debug.dima писал(а):в Debug setup-а нет. а так все регистрируется без проблем ....
В опциях компиляции злощастной DLL “Pentium Pro” поменяли на “Blend*”
А-БАЛ-АЕТЬ !
-
- Завсегдатай
- Сообщения: 278
- Зарегистрирован: 03 мар 2003, 08:55
- Откуда: RU->BC->ON->FI -> Chicago, IL -> Seattle, WA
Re: regsvr32
Это шаманство и не гарантированное решение проблемы. Поскольку не понимаете, из-за чего не работало. Следующий раз, когда не сработает, будете снова с той же проблемой разбираться.dima писал(а):Проблему решили вот как.
В опциях компиляции злощастной DLL “Pentium Pro” поменяли на “Blend*”
А-БАЛ-АЕТЬ !
- dima
- Житель
- Сообщения: 690
- Зарегистрирован: 19 фев 2003, 19:26
- Откуда: Хабаровск->Toronto
Re: regsvr32
след раза не будет ! Эта библиотека будет заменена на другую.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
2 aldep
1. Woozy прав. Или разбираться, или не разбираться.
Если не разобраться, то в будущем обязательно, что-то будет.
2. Немного схожая ситуация с инвалидэйтом в одном из здешних топиков. Только ***хаем себя здесь иначе.
В том, что Вы написали, про то, как setup обламывается при попытке зарегистрировать COM-сервер, ясным по чёрному видно, что скорее всего COM - сервер не грузится вообще в адресное пространство setup-a в обновлённой его версии. Раз он не грузится, то SMS не может сделать callback вызов STDAPI DllRegisterServer(void) экспортируемой первой DLL (та, что работала в самом начале в первой версии), и как следствие не может зарегистрировать CLSID, PROGID в реестре.
А происходит это от того, что скорее какой-то умник или статически вяжет DLL, или неверно задаёт пути до второй DLL. Скорее всего второе, т.к. в первом случае, если setup писан не руками (я думаю, что до этого ещё дело не дошло) присутствовала бы хоть какая-нить обработка ошибок. В первом случае (т.н. раннее связывание) "вызывающий процесс" будет просто валиться по загрузке со всеми вытекающими последствиями в части регистрации COM-сервера.
1. Woozy прав. Или разбираться, или не разбираться.
Если не разобраться, то в будущем обязательно, что-то будет.
2. Немного схожая ситуация с инвалидэйтом в одном из здешних топиков. Только ***хаем себя здесь иначе.
В том, что Вы написали, про то, как setup обламывается при попытке зарегистрировать COM-сервер, ясным по чёрному видно, что скорее всего COM - сервер не грузится вообще в адресное пространство setup-a в обновлённой его версии. Раз он не грузится, то SMS не может сделать callback вызов STDAPI DllRegisterServer(void) экспортируемой первой DLL (та, что работала в самом начале в первой версии), и как следствие не может зарегистрировать CLSID, PROGID в реестре.
А происходит это от того, что скорее какой-то умник или статически вяжет DLL, или неверно задаёт пути до второй DLL. Скорее всего второе, т.к. в первом случае, если setup писан не руками (я думаю, что до этого ещё дело не дошло) присутствовала бы хоть какая-нить обработка ошибок. В первом случае (т.н. раннее связывание) "вызывающий процесс" будет просто валиться по загрузке со всеми вытекающими последствиями в части регистрации COM-сервера.
- aldep
- Маньяк
- Сообщения: 1593
- Зарегистрирован: 18 фев 2003, 08:06
- Откуда: Toronto
- Контактная информация:
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Я прошу прощения, aldep. Я торопился, когда постил. Я даже перепутал там в попыхах в конце (вернее, первое назвал вторым и наооборот) в своём постинге замечания о способах загрузки DLL, из-за которой валится setup. Примите мои извинения. С другой стороны, видите какая Вы популярная личность, что на автомате даже вылетает "aldep" вместо Дмитрия.
Разве это плохо




- Lepsik
- Житель
- Сообщения: 522
- Зарегистрирован: 17 фев 2003, 18:34
- Откуда: Berlin
- Контактная информация:
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага