ポインタparamsを使用して出力パラメータを取得するための適切なシグネチャ/マーシャル属性は何ですか?これまでのところ、私はこれを試してみました:Dll参照で単一の値を取得する方法
// Function to calculate the norm of vector. !0 on error.
// int err_NormVec(int size, double * vector, double * norm)
[DllImport("vectors.dll")]
int err_NormVec(int size, double[] vector, ref double norm)
以前のアプローチは、私はまたのIntPtr署名で、固定GCHandleを使用しようとしたC.から.NETに値をバックポップしません。
[DllImport("vectors.dll")]
int err_NormVec(int size, double[] vector, IntPtr norm)
public void doSomething()
{
double norm = 0;
// ...
GCHandle handle = GCHandle.Alloc(norm, GCHandleType.Pinned);
int status = err_NormVec(vector.Lenght, vector, handle.AddrOfPinnedObject());
// ... clean gchandle, check status and so on
}
この場合、私はGCHandle.Targetの値を元に戻していますが、元の基準ではありません。どちらが迷惑です。私は、それだけではなく、自己の規範のintptrを固定することができるようにしたいと思います。
ポインタを使用して値を返す適切なシグネチャは何ですか? IntPtrをint値にするためのサポートされた方法はありますか?
私はwin64を使用していることを忘れています。幸運にもwin32アプリで動作する悪い習慣をいくつか公開しました。 – fprades
'err_NormVec'の実装(または少なくとも署名)を教えてください。出力パラメータとして使用するためにdoubleを固定する必要はありません。 'ref'で十分です。 –
@エイズ:あなたは盲目ですか? – leppie