Come convertire un tipo non gestito definito dall'utente a un tipo gestito?
-
06-09-2019 - |
Domanda
Ho un test che sto scrivendo in MSTest, che è gestito C ++, e sto cercando di testare una classe non gestita. In particolare, sto cercando di utilizzare la classe PrivateObject di chiamare un metodo privato.
Questo è il codice che ho finora:
CUnmanagedType foo;
PrivateObject privateFoo = gcnew PrivateObject( foo );
CString strFromFoo = privateFoo.Invoke( "ARandomPrivateMethod" );
Quando compilo ottengo un errore che pippo non è convertibile a System :: Tipo ^. Ho provato a fare il seguente:
PrivateObject privateFoo = gcnew PrivateObject( (gcnew System::Type^(foo)) );
, ma che non funziona perché System :: Tipo ^ è un tipo astratto. Tutte le idee?
Ho guardato a queste domande, ma hanno usato i tipi definiti pre, non quelli definiti dall'utente: Come convertire un doppio non gestito in una stringa gestito? tra i tipi gestiti e non gestiti in C ++?
Soluzione
Il costruttore PrivateObject vuole un typename, non un'istanza. Per fare questo, si avrebbe bisogno di fare quanto segue:
PrivateObject privateFoo = gcnew PrivateObject( "CUnmanagedType" )