Domanda

Ho appena fatto un aggiornamento a una DLL che viene chiamato da VBA in PowerPoint. Tutto lo sviluppo è andato bene, ma quando ho cercato di distribuire su un'altra macchina utenti ho un problema che non ho idea di come eseguire il debug.

Quello che succede è che quando l'oggetto .Net viene creato nella VBA, il riferimento che viene restituito è l'oggetto sbagliato, in modo che la riga successiva non riesce con il metodo non trovato.

Dim myObj As Foo.Bar

Public Sub RefreshData()

//'instantiate object
Set myObj = New Foo.Bar   
//'call a method
myObj.HelloWorld

L'ultima riga non riesce con Errore di run-time '438' oggetto non supporta questa proprietà o metodo che è causato dal fatto che in qualche modo myObj è di tipo "Wrong.Type" invece di "Foo.Bar".

"Wrong.Type" è anche nel montaggio, in modo da assumere qualcosa sta andando storto con la libreria dei tipi, ma ho provato rigenerante (usando regasm / codebase / TLB MyLib.dll), e questo non ha aiutato.

Non so come diagnosticare questo oltre. Speriamo che qualcuno là fuori può elencare alcuni passaggi su come diagnosticare questo tipo di problema?

È stato utile?

Soluzione 2

In questo caso, rimuovendo il riferimento al file TLB, e quindi aggiungendo nuovamente risolto il problema

Purtroppo, non ho mai fatto trovare una soluzione generale, o una spiegazione per il comportamento.

Altri suggerimenti

Potrebbe il problema di GUID generati automaticamente (classe, interfaccia, tipo biblioteca) - quando è stata modificata la DLL, GUID cambiato. Dal momento che la vecchia TLB usato vecchi GUID, facendo riferimento a esso, è legato quei vecchi GUID con nomi tipo, in modo che il codice non è riuscito a lavorare con i nuovi GUID. La maggior parte del codice VB (6 e .NET) ho incontrato ha questo problema, quindi, se la DLL è scritto in VB, è probabilmente (e il vostro lavoro supporta circa questa teoria).

Se questo è il problema, una soluzione generale è quella di impostare GUID in modo esplicito, che è un po 'fastidioso se si dispone di un sacco di tipi, dal momento che si suppone di cambiare GUID come la versione (s) il cambiamento, e si' ll hanno a che fare manualmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top