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的问题。