我在托管类中有 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”
}