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 ++?

È stato utile?

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" )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top