Wie ein benutzerdefinierten nicht verwalteten Typen in einen verwalteten Typen konvertieren?

StackOverflow https://stackoverflow.com/questions/916507

  •  06-09-2019
  •  | 
  •  

Frage

Ich habe einen Test, den ich in MSTest ich schreibe, die C ++ verwaltet wird, und ich versuche, eine nicht verwaltete Klasse zu testen. Genauer gesagt, ich versuche, die PrivateObject Klasse zu verwenden, um eine private Methode zu nennen.

Dies ist der Code, den ich bisher haben:

CUnmanagedType foo;
PrivateObject privateFoo = gcnew PrivateObject( foo );

CString strFromFoo = privateFoo.Invoke( "ARandomPrivateMethod" );

Wenn ich kompilieren ich eine Fehlermeldung erhalten, dass foo konvertierbar ist nicht auf System :: Typ ^. Ich habe versucht, Sie folgendermaßen vorgehen:

PrivateObject privateFoo = gcnew PrivateObject( (gcnew System::Type^(foo)) );

, aber das wird nicht funktionieren, weil Systeme :: Typ ^ ist eine abstrakte Art. Irgendwelche Ideen?

Ich habe auf diese Fragen gesucht, aber sie verwendeten Typen vordefinierte, nicht benutzerdefinierte diejenigen: Wie eine nicht verwaltete doppelt auf eine verwaltete Zeichenfolge konvertieren? Konvertierung zwischen verwalteten und nicht verwalteten Typen in C ++?

War es hilfreich?

Lösung

Der PrivateObject Konstruktor will einen Typnamen, keine Instanz. Dazu müssen Sie Folgendes tun:

PrivateObject privateFoo = gcnew PrivateObject( "CUnmanagedType" )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top