2015-04-14 2 views
2

В настоящее время я пытаюсь ссылаться на библиотеку .NET COM в приложении Visual Basic 6. Я зарегистрировал его, используя Regasm, и я установил ComVisible в true в моем классе. Однако, когда я пытаюсь запустить мое приложение, я получаю следующую ошибку:Компонент ActiveX не может создать объект? .NET COM

Компонент ActiveX не может создать объект.

Моя библиотека состоит из очень простой функции (поскольку я просто хотел проверить, могу ли я ее даже запустить), она просто возвращает строку «Hello World».

Мне пришлось использовать другую машину (машину 1) для создания моего класса C# .Net и затем скопировать этот класс на другую машину (машина 2), а затем зарегистрировать dll и ссылаться на нее в моем проекте. Затем я протестировал свой проект на отдельной машине (машина 3), которая была получена с ошибкой.

Мне очень нужна помощь в этом, я уже пробовал перерегистрировать и перерегистрировать его и до сих пор безрезультатно.

+0

Да, вы сделали что-то не так. Мы не можем видеть, что вы делаете это неправильно. –

+0

@HansPassant Я создал библиотеку C# на машине 1, а затем скопировал это на машину 2, на машине 2 я зарегистрировал dll, которая создала файл .tlb. Затем я ссылался на этот файл .tlb в приложении vb6. Однако, когда я тестирую свой проект на машине 3 (целевой машине), я получаю ошибку, как указано выше. – dantheman

+0

@HansPassant, делать .tlb файлы ИМЕТЬ быть в папке C: \ Windows \ system32? – dantheman

ответ

1

Попробуйте это.

Из командной строки:

  1. RegAsm /codebase /tlb AssemblyName.dll. Обратите внимание на сгенерированный файл .tlb.
  2. RegTlib File.tlb
  3. Открытый проект VB6 и ссылка на файл .tlb.
+0

Есть ли способ проверить, действительно ли DLL зарегистрирована, кроме командной строки с сообщением об успешной регистрации. Проблема с моим кодом сейчас заключается в том, что он ищет неправильный файл для dll/.tlb – dantheman

+1

Командная строка - лучший способ определить, зарегистрирована ли она. Чтобы узнать, какой DLL он использует, откройте 'regedit' и выполните поиск в ProgID компонента COM (ComponentName.Classname). Это даст вам CLSID. Затем выполните поиск этого CLSID для подраздела InProcServer32 - это скажет вам, к какому файлу он будет обращаться при попытке загрузить .DLL и вернуть указатель интерфейса COM. Вы можете удалить эти ключи и, при необходимости, перерегистрировать компонент. –

+0

Для компонента COM (ComponentName.ClassName), по ComponentName, вы имеете в виду пространство имен? – dantheman

Смежные вопросы