Что вызывает «Метод ~ объекта ~ не удалось» в приложении VB6? - PullRequest
1 голос
/ 11 января 2012

Я работаю над старым приложением VB6 и недавно добавил компонент Siemens OPC. При работе в отладчике VB6 у меня нет проблем.

Затем я создал пакет развертывания (в комплект входят библиотеки OPC Siemens) и развернул приложение на том же ПК. Затем я получаю следующее сообщение об ошибке при доступе к объекту OPC:

«Метод ~ объекта ~ не выполнен»

Кто-нибудь может подсказать, что может быть причиной этого или что я могу сделать, чтобы получить больше информации?

UPDATE Мне известны другие вопросы, связанные с этим сообщением об ошибке. Что меня здесь озадачивает, так это то, что при использовании отладчика VB проблем нет. Проблемы возникают после развертывания - даже на одной машине. Я бы подумал, что все компоненты остаются зарегистрированными и доступными.

КОД

Public Sub InitialiseOPC(ServerIP As String, OpcServerName As String, BaseAddress As String)
    On Error GoTo ProcError
    IsInitialised = False

    Set MyOpcServer = New OPCServer
    Dim LocalServers

    LocalServers = MyOpcServer.GetOPCServers(ServerIP)
    ....

Ошибка возникает при вызове GetOPCServers. Это первый доступ к компоненту OPC.

Есть ли способ отследить, что в данный момент делает VB (например, загрузка dll)?

UPDATE

Я попытался развернуть библиотеки Siemens в папке приложения вместо папок по умолчанию, и это сообщение об ошибке больше не появляется.

1 Ответ

4 голосов
/ 11 января 2012

Method ~ of object ~ failed генерируется, когда возникает исключение (SEH) во время вызова с поздним связыванием. VB6 прилагает усилия, чтобы «обернуть» каждый вызов с поздним связыванием, чтобы уловить такое неожиданное поведение.

В вашем случае, скорее всего, компонент VC пытается загрузить зависимую DLL или COM-объект и завершается с ошибкой, но не обрабатывает ошибку изящно. Вместо этого он пытается вызвать метод для пустой ссылки и бомб с нарушением прав доступа или аналогичным исключением.

...