2011-01-14 3 views
0

У меня есть проект VB.Net, которому необходимо использовать стороннюю DLL, для которой также имеется сборка interop. Так что у меня есть что-то вроде этого:Сборка, не указанная в VS10 Обозреватель объектов

Hummingbird.DM.Server.Interop.PCDClient.dll 
PCDClient.dll 

Я пытался добавить ссылку на Interop непосредственно в проекте, но на запуск файла я получил COM не зарегистрирована ошибка.

Итак, я попытался регистрации Interop следующим образом:

gacutil /if "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

regasm "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

Даже после перезагрузки VS, сборка еще не видно.

ответ

1

Ваша команда regasm уничтожает ключи реестра для COM-сервера. Вам придется переустановить его. Используйте только regasm самостоятельно [ComVisible].

Одна из причин, по которой у вас могут возникнуть проблемы с использованием компонента, за исключением того, что он не был установлен правильно, заключается в том, что вы пытаетесь запустить его в 64-разрядной операционной системе. А компонент 32-бит, безусловно, самый распространенный случай. Вам нужно заставить приложение работать в 32-битном режиме, чтобы использовать его. В VB.NET IDE это делается с помощью Project + Properties, вкладки Compile, прокрутки вниз, Advanced Compile Options, установите Target CPU на «x86».

Средство устранения неполадок для таких проблем, как утилита ProcMon от SysInternals. Он показывает вам, как COM использует ключ HKLM \ Software \ Classes \ CLSID для поиска загружаемой DLL.

+0

Значит, вы говорите, что я должен использовать только GACUTIL, а не оба? Я не зарегистрировал его с помощью «regasm/u ...», тогда я сделал «gacutil/if ...», это достаточно? Моя система Win XP 32Bit. – udeleng

+0

Вы не должны использовать ни один из них, этот COM-сервер вряд ли будет управляемым кодом. Как я уже сказал, запуск regasm перезаписывал ключи реестра для COM-сервера, вам нужно его повторно установить. Использование Regsvr32 в * неуправляемой * DLL (не библиотеке interop) является вероятным способом, обратитесь за поддержкой к поставщику, если у вас больше проблем. –

+0

Я использовал «regsvr32 PCDClient.dll» (interop все еще находится в GAC, не уверен, что это необходимо), и теперь я вижу Interop.PCDCLIENTLib, перечисленные в Обозревателе объектов. Можете ли вы подтвердить, что шаги, которые я должен использовать следующие: gacutil/если "C: \ ... \ Hummingbird.DM.Server.Interop.PCDClient.dll" regsvr32 «C: \ ... \ PCDClient. dll " – udeleng

0

Вы регистрируете взаимодействие, но (как подсказывает сообщение об ошибке) вы не зарегистрировали COM-DLL. Попробуйте следующее:

regsvr32 pdcclient.dll