Frage

Ich habe gesagt, einen Dialog in C # zu schreiben, die aus einem nicht verwalteten c ++ dll instanziert werden muss. Wir tun dies in anderen Orten in unserem Code, indem Sie einfach eine verwaltete c ++ Klasse mit dem C ++ Projekt hinzufügen, dann die DLL C # Aufruf vom verwalteten c ++ Klasse. Ich finde aber, dass nicht für mich arbeiten, wo ich es zu tun habe. Ich denke, weil die c ++ dll ein MFCActiveX Projekt. Sobald ich die clr auf eine beliebige Datei in dieses Projekt gesetzt ist, wird es nicht mehr korrekt registrieren. Wenn ich es registrieren versuchen, erhalte ich drei Fehler, dann eine Nachricht, die es registriert. Jedoch wenn ich versuche, es zu benutzen, ich bekomme ein 0x80040111 Fehler „Classfactory kann nicht angeforderte Klasse liefern“. Wenn jemand eine Idee hat, was das Problem hier ist, würde ich es sehr schätzen. Ich entweder müssen in der Lage, diese (bevorzugt) zu erreichen oder beweisen, dass es nicht möglich ist.

Danke

War es hilfreich?

Lösung

Ich kann nicht sehen, wie ein MFCActiveX Projekt, das Sie von der Erstellung der C # Klasse auf diese Weise verhindern würde. Es sei denn, es einfach nicht für eine verwaltete Klasse kann hinzugefügt werden.

Wenn Sie nicht den verwaltete C ++ Klasse Trick zu arbeiten, ist eine weitere Option COM zu verwenden. Es ist möglich, eine Fabrik von Sorten in dem C # Projekt als COM-Objekt zu registrieren. Sagen Sie geben ihm die folgende Schnittstelle

[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory {
  void Create(); 
}

Sie würden auch als auch eine Träger Klasse erstellen müssen. Aber dann könnte man das verwaltete Assembly registrieren und verwenden COM darauf zuzugreifen.

Andere Tipps

Sie müssen jetzt registrieren es mit "regasm" statt "regsvr32".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top