Domanda

Sto cercando di aggiungere un VC6 COM DLL al nostro # soluzione VS2010RC C. La DLL è stata compilata con gli strumenti VC6 per creare una versione x 86 ed è stato compilato con gli strumenti VC7 multipiattaforma per generare una DLL VC7.

La versione x86 del gruppo funziona bene fino a quando la piattaforma consumando C # del progetto è impostato su x86. Non importa se il 64 o la versione x86 di DLL è in realtà registrati. Funziona con entrambi. Se la piattaforma è impostata su 'Qualsiasi CPU' ricevo un BadImageFormatException sul carico della Interop.<name>.dll.

Per quanto riguarda la versione x64, non riesco nemmeno a ottenere il progetto di costruire. Ricevo l'errore TlbImp:

  

TlbImp: Errore TI0000: Un unico tipo di macchina valida compatibile con il   libreria di tipo di ingresso deve essere specificato.

Qualcuno ha visto questo problema?

EDIT:

ho fatto molto di più a scavare in questo problema e che questo potrebbe essere un bug Studio visiva. Ho una soluzione pulita. Io porto nel mio assembly COM con il linguaggio agnostico 'Qualsiasi CPU' selezionato. L'architettura del processo risultante Interop DLL è x86 anziché MSIL.

Può avere per rendere l'interoperabilità a mano per il momento per farlo funzionare.

Se qualcuno ha un altro suggerimento me lo faccia sapere.

È stato utile?

Soluzione

Questo problema può essere risolto aprendo il file csproj e aggiungendo il seguente nodo ad uno qualsiasi degli '(configurazione) | Qualsiasi CPU' nodi che mancano è:

<PlatformTarget>AnyCPU</PlatformTarget>

Se questo nodo non è presente TlbImp imposterà x86 e causare problemi.

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