前提・実現したいこと
前提
C++で作成したDLL "Sample.dll"があります。
"Sample.dll"に以下のような関数"sample_return_ptr"があります。
- 入力 なし
- 出力 float *
- 動作 関数内でfloat型の配列を動的に確保し、そのポインタを返す
- 配列の要素数は、呼び出す側からは見えません
上記の"sample_return_ptr"をC#から呼び出すことを想定します。
この時に、"sample_return_ptr"から返された配列へのポインタを利用して、C#ではfloat配列として利用したいと考えています。
発生している問題・エラーメッセージ
配列の要素数が不明な場合に、どのようにするかがわからない。
該当のソースコード
C++
1class __declspec(dllexport) Sample{ 2public: 3 float* sample_return_ptr(){ 4 //例として要素数5. nは任意の整数としてください。 5 int n = 5; 6 float* ret = (float *)malloc(sizeof(float) * n); 7 8 return ret; 9 } 10}
C#
1//この関数で受け取るIntPtrの扱いをどのようにすればよいのか 2[DllImport("Sample.dll")] 3extern IntPtr sample_return_ptr();
試したこと
このページにたどり着き、参考にしてポインタを返す関数の呼び出し自体はできそうな状態です。
参考にした内容では、予め配列の要素数が分かっている状態?(文字列なので配列と言っていいのかは微妙ですが、文字列の長さが分かっている状態)のため、要素数が不明な場合はどうすればいいのかで止まってしまいました。
補足情報(FW/ツールのバージョンなど)
64bit Windows
C++11以降
Visual Studio 2015 Pro
回答1件
あなたの回答
tips
プレビュー