能够使用指针参数获取输出参数的适当签名/编组属性是什么?到目前为止,我试过这个:
// 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。我还尝试使用带有 IntPtr 签名的固定 GCHandle。
[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 值的方法?