Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何在C++/CLI? 我在C++中使用C++或CLI,只在VS2010中对非托管C++代码进行单元测试。我将编译器切换到/clr,并使用静态库中的非托管代码_Visual Studio_Visual C++_C++ Cli - Fatal编程技术网

Visual studio 如何在C++/CLI? 我在C++中使用C++或CLI,只在VS2010中对非托管C++代码进行单元测试。我将编译器切换到/clr,并使用静态库中的非托管代码

Visual studio 如何在C++/CLI? 我在C++中使用C++或CLI,只在VS2010中对非托管C++代码进行单元测试。我将编译器切换到/clr,并使用静态库中的非托管代码,visual-studio,visual-c++,c++-cli,Visual Studio,Visual C++,C++ Cli,我的测试类中有一个简单的int属性。 我想把它作为一个 const int和,传递给本机C++中的函数。但它不能编译,我发现,这是因为你不能像那样混合引用 怎么做,我试着跟随它,它是有效的,但是有更好的方法吗 [TestClass] public ref class MyTestClass { private: int _my_property; public: [TestMethod] void MyTestMethod() { MyNativ

我的测试类中有一个简单的
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
    }
}

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

另一个SO问题中的更多信息和示例:

编辑2


我删除了附加信息,因为它显然是错误的(感谢@Tergiver和@DeadMG的评论)。我也在制作邮政社区wiki,所以可以随意添加任何额外的正确信息。

同时我发现我可以使用没有被管理的C++风格指针,这对我来说已经足够了。code>int*_my_属性托管引用必须先固定,然后才能传递给非托管代码,这是正确的。但是,可以固定的内容与堆栈无关。只能固定“可空袭”对象。blittable对象本质上是一种值类型或一组值类型。我不清楚所有的“blibility规则”。@Tergiver和@DeadMG谢谢你的评论,我已经更新了我的帖子。引用不会移动,对象会移动。否则这就解释了OP的问题。