2011-01-14 3 views
0

Ich habe ein VB.Net-Projekt, das eine DLL von Drittanbietern verwenden muss, für die es auch eine Interop-Assembly gibt. So habe ich so etwas wie dieses:Assembly nicht in VS10 Objektbrowser

Hummingbird.DM.Server.Interop.PCDClient.dll 
PCDClient.dll 

ich Zugabe versucht den Verweis auf die Interop direkt in das Projekt, aber die Datei auf laufende ich eine COM bekam nicht registriert Fehler.

Also habe ich versucht, die Interop-Registrierung wie folgt:

gacutil /if "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

regasm "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

Auch nach VS Neustart ist die Montage noch nicht sichtbar.

Antwort

1

Ihr Befehl regasm hat die Registrierungsschlüssel für den COM-Server zerstört. Sie müssen es neu installieren. Verwenden Sie nur regasm für Ihren eigenen Code [ComVisible].

Ein Grund, warum Sie Probleme mit der Komponente haben können, die darüber hinaus nicht richtig installiert wurde, ist, dass Sie versuchen, dies auf einem 64-Bit-Betriebssystem auszuführen. Und die Komponente ist 32-Bit, bei weitem der häufigste Fall. Sie müssen Ihre App im 32-Bit-Modus ausführen, um sie verwenden zu können. In der VB.NET-IDE, das ist gemacht mit Projekt + Eigenschaften, Registerkarte Kompilieren, scrollen Sie nach unten, Erweiterte Kompilieroptionen, setzen Sie Ziel-CPU auf "x86".

Das ultimative Tool zur Fehlersuche bei Problemen wie diesem ist das ProcMon-Dienstprogramm von SysInternals. Es zeigt Ihnen, wie COM den Schlüssel HKLM \ Software \ Classes \ CLSID verwendet, um nach dem zu ladenden DLL zu suchen.

+0

Sie sagen also, ich sollte nur GACUTIL verwenden, und nicht beides? Ich habe die Registrierung mit "regasm/u ..." aufgehoben, dann habe ich "gacutil/if ..." ist das ausreichend? Mein System ist Win XP 32Bit. – udeleng

+0

Sie sollten keines von beiden verwenden, dieser COM-Server ist wahrscheinlich kein verwalteter Code. Wie ich bereits sagte, überschreiben regasm die Registrierungsschlüssel für den COM-Server, Sie müssen es neu installieren. Die Verwendung von Regsvr32 für die * unmanaged * DLL (nicht für die Interop-Bibliothek) ist der wahrscheinlichste Weg. Fragen Sie nach Unterstützung vom Hersteller, wenn Sie mehr Probleme haben. –

+0

Ich habe "regsvr32 PCDClient.dll" (das Interop ist immer noch in GAC, nicht sicher, ob das erforderlich ist), und jetzt sehe ich Interop.PCDCLIENTLib im Objekt-Browser aufgelistet. Können Sie bestätigen, dass die Schritte soll ich verwenden sind: gacutil/if "C: \ ... \ Hummingbird.DM.Server.Interop.PCDClient.dll" regsvr32 „C: \ ... \ PCDClient. dll " – udeleng

0

Sie registrieren das Interop, aber (wie die Fehlermeldung vorschlägt) haben Sie das COM DLL nicht registriert. Versuchen Sie Folgendes:

regsvr32 pdcclient.dll