2016-12-08 5 views
-2

私のメインプログラムはC++/CLI(管理対象)で書かれています。私のハードウェアの一部のAPIは.Cファイルに含まれています。私のメインプログラムから、配列を作成し、ハードウェアで動作するアンマネージドCコードのmain()を呼び出します。完了すると、ハードウェアから切断され、メモリが解放され、C++/CLIプログラムに戻ります。C++/CLIでアンマネージアレイにアクセスする

アンマネージcコードからマネージC++にその配列にアクセス(コピー)するにはどうすればよいでしょうか?

+1

です。管理されていないCコードが「メモリを解放して返します」とすれば、何もコピーすることはできません。 –

+0

また、他の.NET言語(例:C#)の「メインプログラム」を記述する必要があります。マイクロソフトでは、C++/CLIはinteropシナリオでのみ使用する予定です。 –

+0

申し訳ありませんが、多分私はVisual C++を意味しました。 – Matt

答えて

-2

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; 
} 
+0

ピン配列をCで書かれた関数に渡すことはできますか?リンクは、オブジェクトとして固定されているように表示されます。 – Matt

+0

はい、上記のコードで 'std :: copy()'に表示されているように –

+0

私はまだそれを解決しています。 – Matt

関連する問題