0

我有一个在 MSTest 中编写的测试,它是托管 C++,我正在尝试测试一个非托管类。具体来说,我正在尝试使用 PrivateObject 类来调用私有方法。

这是我到目前为止的代码:

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

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

当我编译时,我得到一个错误,即 foo 不能转换为 System::Type^。我尝试过执行以下操作:

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

但这不起作用,因为 System::Type^ 是一种抽象类型。有任何想法吗?

我看过这些问题,但他们使用的是预定义类型,而不是用户定义的类型: 如何将非托管双精度转换为托管字符串? C ++中托管和非托管类型之间的转换?

4

1 回答 1

1

PrivateObject 构造函数需要一个类型名,而不是一个实例。为此,您需要执行以下操作:

PrivateObject privateFoo = gcnew PrivateObject( "CUnmanagedType" )
于 2009-05-27T19:23:06.880 回答