C++/CLI (配列) を使用して、ネイティブ (つまり、管理されていない) データ (byte*) を管理されたバイト配列にコピーする必要があります。
Marshal::Copy を試しました (データは const void* data によってポイントされ、dataSize バイトです)
array<byte>^ _Data=gcnew array<byte>(dataSize);
System::Runtime::InteropServices::Marshal::Copy((byte*)data, _Data, 0, dataSize);
これはエラーC2665を引き起こします: 16のオーバーロードのどれもすべてのパラメータを変換できません。そこで私は試しました
System::Runtime::InteropServices::Marshal::Copy(new IntPtr(data), _Data, 0, dataSize);
これにより、エラー C2664 が発生します: パラメーター 1 は "const void*" から "__w64 int" に変換できません。
それで、それはどのように実行できるのでしょうか。そして、Marshal::Copy は実際に「最良」(最も簡単/最速) の方法なのでしょうか。
ベストアンサー1
ご指摘のとおり、Marshal::Copy
(.NET 全般) はconst
-safe ではありません。
ただし、通常の C および C++ 関数は、次のいずれかの方法で記述できます。
array<byte>^ data_array =gcnew array<byte>(dataSize);
pin_ptr<byte> data_array_start = &data_array[0];
memcpy(data_array_start, data, dataSize);
またはピン留めを回避するには:
array<byte>^ data_array =gcnew array<byte>(dataSize);
for( int i = 0; i < data_array->Length; ++i )
data_array[i] = data[i];