ポインターパラメーターを使用して出力パラメーターを取得できる適切な署名/マーシャル属性は何ですか? これまでのところ、私はこれを試しました:
// 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)
前のアプローチでは、値が C から .NET に戻されません。また、固定された GCHandle を IntPtr シグネチャと共に使用しようとしました。
[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 値に取得するサポートされている方法はありますか?