-1

我在托管类中有 long 类型的静态变量。我必须将其地址传递给本机函数(interlockedIncrement)。非静态变量的地址可以分配给 pin_ptr,但我们不能为静态编译它。有解决办法吗?

    private:
     static long s_x  = 0;
     long m_x;
    ...
...
    // inside method
      pin_ptr<long> pstatic = &s_x; // does not compiles
      pin_ptr<long> pMember = &m_x; // compiles

你的课是参考课吗?

是 如果是,则代码没有问题。但它没有编译如果没有,那么你不能用这种方式初始化静态值。请添加更多代码。谢谢

代码示例足以显示问题:

// .h
ref class ManagedClass
{     
    private:
  // Number of instances of this class
  static __int64 mSTField = 0;
    __int64 mField;
}

// .cpp
ManagedClass:: ManagedClass()
{
   pin_ptr<__int64 > mSTPtr = &mSTField; // does not compile. “cannot convert interior_ptr to pin_ptr”
   pin_ptr<__int64 > mPtr   = & mField; // compiles
   InterlockedIncrement((__int64*) mSTPtr); // Native method does work only in case if mSTPtr is “pin_ptr”
}
4

1 回答 1

0
pin_ptr<__int64> mSTPtr = pin_ptr<__int64>(&mSTField);

指针转换

于 2013-10-04T13:18:40.743 回答