CreateObject vb6 - PullRequest
       6

CreateObject vb6

1 голос
/ 20 января 2011

Я работаю над существующим приложением в VB6, которое вызывает .NET DLL. но мой код .NET не отражает, когда он вызывается из приложения VB6. Я добавил одно общедоступное свойство в приложение .NET, но при попытке получить к нему доступ VB6 вызывает исключение:

"Объект не поддерживает это свойство или метод"

Код события My PostBuild.

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe $(ProjectDir)bin\$(TargetName).dll  /regfile:$(TargetName).reg
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe $(ProjectDir)bin\$(TargetName).dll  /tlb:$(TargetName).tlb

Я вижу, что CLSID реестра меняется. Но код не отражает при звонке с VB6 (Объект не поддерживает это свойство или метод)

Код VB6

Set frmApp = CreateObject("AssemblyName.Class1")

Нужно ли выполнять какие-либо другие настройки?

Как установить ссылки в VB6 на новый classid?

Ответы [ 3 ]

3 голосов
/ 20 января 2011

Вы можете пометить свои классы .Net атрибутом ProgId .Это предотвратит изменение вашего clsid при каждой компиляции.

Если clsid не изменяется, вам не нужно отменять и заново регистрировать свои классы.

После повторной регистрации вам также необходимо установить ссылки в VB6 нановый классид.VB6 использует clsid для поиска компонента.

После комментария
VB6 уже давно.Я не знаю, является ли «ссылка» правильным термином.Но вы должны удалить зависимость от старой библиотеки.И добавьте зависимость к новому, как вы делали это в первый раз.

1 голос
/ 20 января 2011

«Не отражает» - очень неясно. Но, как написано, эти команды regasm.exe не достаточны для того, чтобы программа VB6 могла найти сборку. Если он не жалуется на создание объекта класса, то вы уже использовали gacutil.exe в прошлом. И GAC содержит старую копию вашей DLL. Вам придется удалить эту старую копию, используйте gacutil.exe / u

Измените командную строку regasm.exe, добавьте параметр / codebase, чтобы он всегда использовал копию DLL в каталоге сборки вместо поиска DLL в GAC.

0 голосов
/ 21 января 2011

Готово ... Я просто скопировал мою DLL в C: \ Program Files \ Microsoft Visual Studio \ VB98, и ее работа не требует развертывания в GAC или / Codebase switch

...