私はC#を初めて使っています(先週学習を始めたばかりです)。C#でCの配列とポインタを使用するDLL
私は次の関数をCで書かれたカスタムDLL持っている:私が何を探しています何
DLLIMPORT void test_function (double **test)
は、アレイ「試験」用のC#からポインタを持っています。
DLL関数では、test [0] = 450.60、test [1] = 512.99などです。私はC#プログラムで使用できるようにしたいと思います。私は次のように使用するDLLの 'test_function' 関数で
namespace TestUtil
{
public class Echo
{
public double[] results = new double[10];
public double[] results_cpy = new double[10];
[DllImport("test_dll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern unsafe void test_function(ref double[] Result);
public unsafe void Tell()
{
results[0] = 0.0;
results[1] = 0.0;
results_cpy[0] = 0.0;
results_cpy[1] = 0.0;
test_function(ref results);
results_cpy[0] = (double)results[0] + (double)results[1] ;
}
}
}
::私はのようなものを持っているC#のプログラムで
*test[0] = 450.60;
*test[1] = 512.99;
DLLのすべてがOKだった中で(私が使用しました値が適用されていることを確認するDLL内のメッセージボックス)。 C#プログラムの '結果[0]'はうまく表示され、値を取得できますが、 'results [1]'は範囲外のインデックスを返します。私は '+(double)results [1]'を省略するとエラーは発生しないので、これを知っています。また、私がDLL内で 'test [1]'を修正しようとしないと、C#の元の値が保持されます(私の例では0.0)。
明らかに私は何か正しいことをしていませんが、これは私が仕事をしていることに最も近づいています。私が試した他のすべてが悲惨に失敗します。
ご協力いただければ幸いです。
+1は危険です。ほとんどの場合、より良い方法があります。 – Rap