私のメインプログラムはC++/CLI(管理対象)で書かれています。私のハードウェアの一部のAPIは.Cファイルに含まれています。私のメインプログラムから、配列を作成し、ハードウェアで動作するアンマネージドCコードのmain()を呼び出します。完了すると、ハードウェアから切断され、メモリが解放され、C++/CLIプログラムに戻ります。C++/CLIでアンマネージアレイにアクセスする
アンマネージcコードからマネージC++にその配列にアクセス(コピー)するにはどうすればよいでしょうか?
私のメインプログラムはC++/CLI(管理対象)で書かれています。私のハードウェアの一部のAPIは.Cファイルに含まれています。私のメインプログラムから、配列を作成し、ハードウェアで動作するアンマネージドCコードのmain()を呼び出します。完了すると、ハードウェアから切断され、メモリが解放され、C++/CLIプログラムに戻ります。C++/CLIでアンマネージアレイにアクセスする
アンマネージcコードからマネージC++にその配列にアクセス(コピー)するにはどうすればよいでしょうか?
How to: Pin Pointers and Arraysを参照。サンプルコードは
#include <vector>
#include <algorithm>
#include <msclr/all.h>
using namespace System;
int main(array<System::String ^> ^args)
{
constexpr size_t count = 100;
std::vector<int> unmanged_ints;
for (auto i = 0; i < count; i++)
unmanged_ints.push_back(i);
auto managed_ints = gcnew cli::array<int>(count);
cli::pin_ptr<int> pManaged_ = &managed_ints[0];
int* pManaged = pManaged_;
std::copy(unmanged_ints.cbegin(), unmanged_ints.cend(), pManaged);
return 0;
}
です。管理されていないCコードが「メモリを解放して返します」とすれば、何もコピーすることはできません。 –
また、他の.NET言語(例:C#)の「メインプログラム」を記述する必要があります。マイクロソフトでは、C++/CLIはinteropシナリオでのみ使用する予定です。 –
申し訳ありませんが、多分私はVisual C++を意味しました。 – Matt