Frage

Ich habe eine gemischte Modusbaugruppe, die mit dem gebaut wurde /clr Möglichkeit. Ich versuche, eine Klasse aus ihr zu exportieren, um durch eine andere gemischte Modus -Montage zu konsumieren, die ebenfalls mit dem gebaut wurde /clr Möglichkeit.

Mein Problem ist, dass die Signatur der Methode eine Mischung aus verwalteten und nicht verwalteten Typen enthält. Zum Beispiel:

static System::String ^Convert( const CString from );

Anfangs habe ich versucht zu verwenden __declspec(dllexport) in der Nichtref-Klasse implementieren dies. Dies ist mit dem Fehler fehlgeschlagen C3395: __declspec (dllexport) kann nicht auf eine Funktion mit der __clrcall -Aufrufkonvention angewendet werden, vermutlich wegen des verwalteten Typs in der Signatur. Meine nächste Einstellung war, die Klasse a zu machen ref Klasse stattdessen. Jetzt baut die Baugruppe und Reflektor die exportierte Methode wie SO an:

public static unsafe string Convert(CStringT<wchar_t,ATL::StrTraitATL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > modopt(IsConst) modreq(IsCopyConstructed)* from);

In der Client -Montage kann ich jedoch nicht auf die exportierte Methode verweisen ...

CString atlString("test");
AtlCStringConverter::Convert( atlString );

... ergibt den Fehler C2039: 'Convert': Ist kein Mitglied von 'xxx :: atlcstringConverter'. Ich habe nach offensichtlichen Fehlern wie dem Mischen verschiedener Zeichentypen überprüft, die dazu führen, dass die Signatur nicht übereinstimmt.

Mir ist klar, dass keiner dieser Exportversuche wirklich koscher ist, da eine Mischung aus verwalteten/nicht verwalteten Typen in der Signatur nebeneinander exponiert ist, aber da diese Mischung aus verwaltet/unwirklich ist innerhalb Als Mischmodus -Baugruppe habe ich mich gefragt, ob es keine Möglichkeit gibt, Typen mit dieser Mischung von Typen in der Signatur zwischen DLLs gemischter Modus zu exportieren.

War es hilfreich?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top