2012-04-17 15 views
7

Abbiamo un plugin per IE basato su spicIE, lo scopo è quello di connettersi ad alcuni dispositivi esterni.Cosa fa veramente RegAsm? Dove vengono copiati i file?

Per connettersi a tali dispositivi esterni, un'altra azienda ha sviluppato il proprio token DLL &. Abbiamo bisogno di avere alcuni ActiveX e DLL per fare l'autenticazione tramite token.

Il problema è che il plugin che abbiamo sviluppato per IE, nella parte finale ha un file install.bat, che esegue un RegAsm e registra la DLL e dopo tale plugin (o le sue modifiche) è visualizzabile in IE.

Quando si esegue il plug-in da IE, il nostro codice non è in grado di trovare alcuna DLL, richiesta per l'autenticazione (denominarla x.dll). Dove viene copiata la DLL registrata? È davvero copiato? Ho bisogno di avere x.dll nella cartella in cui esiste la DLL del mio plugin.

risposta

6

In breve, RegAsm registra l'assembly .NET per la visualizzazione COM. Da MSDN: una volta registrata una classe, qualsiasi client COM può utilizzarla come se la classe fosse una classe COM. La classe viene registrata una sola volta, quando l'assembly è installato. Le istanze di classi all'interno dell'assembly non possono essere create da COM fino a quando non vengono effettivamente registrate.

Senza vedere il codice in ActiveX, se ho capito bene, ActiveX dipende da alcune DLL COM, motivo per cui si sta eseguendo RegAsm su una DLL .NET.

Eseguire RegDllView per trovare i dettagli di ciò che è registrato e quindi verificare se si sta effettivamente istanziare quell'oggetto che è stato effettivamente registrato.

Inoltre, se hai ancora problemi, prova a istanziare l'oggetto in VB6/Visual Studio 2010 ecc. O equivalente in associazione anticipata per vedere se hai qualche problema. Esaminare l'errore durante l'istanziazione.

+0

la situazione è inversa, abbiamo bisogno di istanziare i componenti com/active x nel nostro codice gestito, il nostro codice gestito non riesce a trovare i componenti com/active x –

+1

Ahh ok. Se questi sono i classici componenti COM, dovresti fare semplicemente regsvr32 su di essi. Dopodiché, dovresti essere in grado di aggiungere un riferimento nel tuo progetto VS .NET, nella scheda COM e creare un'istanza. VS fa tutto il lavoro duro per te in background in termini di tipo mapping ecc. – AshesToAshes

+1

Anche per aggiungere a questo, ci sono buone informazioni qui: http://stackoverflow.com/questions/635839/best-way-to- access-com-objects-from-c-sharp che dovrebbe aiutarti anche a iniziare. Di nuovo, prova ad istanziarlo ed esaminare l'HRESULT/cattura che viene fuori mentre vai avanti. – AshesToAshes