2009-03-03 3 views
1

Ich wurde aufgefordert, einen Dialog in C# zu schreiben, der aus einer nicht verwalteten C++ - DLL instanziiert werden muss. Wir machen das an anderen Stellen in unserem Code, indem wir einfach eine verwaltete C++ - Klasse zum C++ - Projekt hinzufügen und dann die C# -Dll von der verwalteten C++ - Klasse aufrufen. Allerdings finde ich, dass das für mich nicht funktioniert, von wo ich es machen muss. Ich denke, weil die C++ DLL ein MFCActiveX Projekt ist. Sobald ich den clr auf eine Datei in diesem Projekt gesetzt habe, wird es nicht mehr korrekt registriert. Wenn ich versuche, es zu registrieren, erhalte ich drei Fehler, dann eine Nachricht, die es registriert hat. Jedoch, wenn ich versuche, es zu benutzen, erhalte ich einen 0x80040111 "ClassFactory kann angeforderte Klasse nicht liefern" Fehler. Wenn jemand eine Idee hat, was das Problem hier ist, würde ich es sehr schätzen. Ich muss entweder in der Lage sein, dies zu erreichen (bevorzugt) oder beweisen, dass das nicht möglich ist.Starten eines C# -Dialogs von einem nicht verwalteten C++ - MFC aktiv x Dll

Dank

Antwort

0

Ich kann nicht sehen, wie ein MFCActiveX-Projekt verhindern würde, dass Sie die C# -Klasse auf diese Weise erstellen. Es sei denn, es kann einfach keine verwaltete Klasse hinzugefügt werden.

Wenn der verwaltete C++ - Klassentrick nicht funktioniert, können Sie auch COM verwenden. Es ist möglich, eine Factory of Art im C# -Projekt als COM-Objekt zu registrieren. Sagen Sie geben Sie die folgende Schnittstelle

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

Sie müssten auch eine Backing-Klasse erstellen. Aber dann könnten Sie die verwaltete Assembly registrieren und COM verwenden, um darauf zuzugreifen.

+0

Danke, ich arbeite jetzt mit dieser Methode. Sehr hilfreicher Dank. –

0

Sie es jetzt registrieren muss mit "regasm" statt "regsvr32".

Verwandte Themen