2010-03-15 14 views
16

Ich versuche, eine VC6-COM-DLL zu unserer VS2010RC C# -Lösung hinzuzufügen. Die DLL wurde mit den VC6-Tools kompiliert, um eine x86-Version zu erstellen, und wurde mit den plattformübergreifenden VC7-Tools kompiliert, um eine VC7-DLL zu generieren.Visual Studio 2010 64-Bit-COM-Interop-Problem

Die x86-Version der Assembly funktioniert einwandfrei, solange die Plattform des ausführenden C# -Projekts auf x86 festgelegt ist. Es spielt keine Rolle, ob die x64- oder x86-Version der DLL tatsächlich registriert ist. Es funktioniert mit beiden. Wenn die Plattform auf 'Any CPU' eingestellt ist, erhalte ich eine BadImageFormatException auf der Last der Interop.<name>.dll.

Wie für die x64-Version kann ich nicht einmal das Projekt erstellen. Ich erhalte den tlbimp Fehler:

TlbImp : error TI0000: A single valid machine type compatible with the input type library must be specified.

Hat jemand dieses Problem gesehen?

EDIT:

ich viel mehr Graben in diesem Thema gemacht habe und denke, das ist ein Visual Studio Fehler sein kann. Ich habe eine saubere Lösung. Ich bringe meine COM-Assembly mit sprachunabhängiger 'Any CPU' ein. Die Prozessarchitektur der resultierenden Interop-DLL ist x86 statt MSIL.

Möglicherweise müssen Sie die Interop von Hand für jetzt machen, um dies zur Arbeit zu bringen.

Wenn jemand einen anderen Vorschlag hat, lass es mich wissen.

Antwort

47

Dieses Problem kann durch das Öffnen der Csproj Datei und das Hinzufügen von dem folgenden Knoten zu einem der aufgelöst werden ‚(Konfiguration) | Any CPU‘ Knoten, die es fehlen:

<PlatformTarget>AnyCPU</PlatformTarget> 

Wenn dieser Knoten nicht vorhanden ist, TlbImp verwendet standardmäßig x86 und verursacht Probleme.

+0

Ich wünschte, ich könnte dies noch ein paar Mal abstimmen. Es ist offensichtlich, was der Fehler im Nachhinein bedeutet, aber auf den ersten Blick verwirrend. – xcud

+0

Es funktionierte, aber ich musste separat hinzufügen Element in CSProj-Datei, damit VS mit dieser Einstellung tatsächlich starten. – Roboblob