如何在C ++ / CLI中将托管引用传递给非托管代码?

时间:2011-05-21 12:01:02

标签: visual-studio visual-c++ c++-cli

我只使用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
    }
}

1 个答案:

答案 0 :(得分:4)

C ++引用实际上只是指针的语法含量。 C ++指针指向内存中的特定点,而CLI引用可以由垃圾收集器自由移动。要将对托管内存中对象的引用传递给非托管代码,您需要 pin 指针。

更多信息和样本在另一个SO问题中:Convert from C++/CLI pointer to native C++ pointer

修改2

我正在删除其他信息,因为它显然是错误的(感谢@Tergiver和@DeadMG的评论)。我也在制作帖子社区维基,所以请随意添加任何其他正确的信息。