2009-05-27 9 views
0

J'ai un test que j'écris dans MSTest, qui est géré en C++, et j'essaie de tester une classe non gérée. Plus précisément, j'essaie d'utiliser la classe PrivateObject pour appeler une méthode privée.Comment convertir un type non géré défini par l'utilisateur en type géré?

Voici le code que j'ai jusqu'à présent:

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

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

Quand je compile je reçois une erreur que foo ne ConverTable à System :: type ^. J'ai essayé de faire ce qui suit:

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

mais cela ne fonctionnera pas car System :: Type^est un type abstrait. Des idées?

J'ai regardé ces questions, mais ils utilisé les types prédéfinis, et non celles définies par l'utilisateur: How to convert a unmanaged double to a managed string? Conversion between managed and unmanaged types in C++?

Répondre

1

Le constructeur PrivateObject veut un typename, pas une instance. Pour ce faire, vous devez effectuer les opérations suivantes:

PrivateObject privateFoo = gcnew PrivateObject("CUnmanagedType") 
Questions connexes