マネージド クラスに 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
あなたのクラスはrefクラスですか?
はい はいの場合、コードに問題はありません。しかし、それはコンパイルされていません。そうでない場合、この方法で静的値を初期化することはできません。さらにコードを追加してください。ありがとう
問題を示すのに十分なコード サンプル:
// .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”
}