我只使用C ++ / CLI对VS2010中的非托管C ++代码进行单元测试。我将编译器切换到/ clr并使用静态库中的非托管代码。
我的测试类中有一个简单的int
属性。
我想将它作为const int &
传递给本机C ++中的函数。但它无法编译,我发现,这是因为你不能混合这样的引用。
这样做的方法是什么,我试着跟随并且它正在工作,但是有更好的方法吗?
[TestClass]
public ref class MyTestClass
{
private:
int _my_property;
public:
[TestMethod]
void MyTestMethod()
{
MyNativeClass c;
// c.SomeMethod(_my_property) this doesn't work
int i = _my__property;
c.SomeMethod(i) // this works
}
}
答案 0 :(得分:4)
C ++引用实际上只是指针的语法含量。 C ++指针指向内存中的特定点,而CLI引用可以由垃圾收集器自由移动。要将对托管内存中对象的引用传递给非托管代码,您需要 pin 指针。
更多信息和样本在另一个SO问题中:Convert from C++/CLI pointer to native C++ pointer
修改2
我正在删除其他信息,因为它显然是错误的(感谢@Tergiver和@DeadMG的评论)。我也在制作帖子社区维基,所以请随意添加任何其他正确的信息。