1

C API の C++ CLI ラッパーに取り組んでいます。C API には、4 つの unsigned short の配列と 4 つの int の配列を含む構造があります。そのため、ラッパー関数を呼び出すときに使用する C# コード用の同様のクラスを作成しました。

// C Structure
typedef struct c_Struct_
{
  unsigned short   uShorts[4];
  int     ints[4];
} c_Struct;


// C++ CLI Class
public ref class CliClass
{
public:
  property array<unsigned short>^ UnsignedShorts
  {
    array<unsigned short>^ get()
    {
      return _unsignedShorts;
    }
  }
  property array<int>^ Ints
  {
    array<int>^ get()
    {
      return _ints;
    }
  }

  CliClass(array<unsigned short>^ us, array<int> i)
  {
    _unsignedShorts = us;
    _ints = i;
  }
private:
  array<unsigned short>^ _unsignedShorts;
  array<int>^ _ints;
}

ここで私の質問に移ります。CLI クラスに内部メソッドを追加して、構造体を作成しました。

internal:
  c_Struct ToStruct()
  {
    c_Struct results;
    results.uShorts[0] = UnsignedShorts[0];
    results.uShorts[1] = UnsignedShorts[1];
    results.uShorts[2] = UnsignedShorts[2];
    results.uShorts[3] = UnsignedShorts[3];
    results.ints[0] = Ints[0];
    results.ints[1] = Ints[1];
    results.ints[2] = Ints[2];
    results.ints[3] = Ints[3];
    return results;
  }

しかし、エラーが発生します: IntelliSense: タイプ "System::Object ^" の値は、割り当てごとにタイプ "unsigned short" のエンティティに割り当てることはできません。これの適切な構文は何ですか?

4

3 に答える 3

1

最初に参照型をアンボックスして、これを試してください:

results.uShorts[0] = (unsigned short)UnsignedShorts[0];
于 2013-11-11T22:11:40.950 に答える