-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

あなたのクラスは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”
}
4

1 に答える 1