Какой подходящий атрибут подписи/marshall для получения выходных параметров с использованием параметров указателей? До сих пор я пробовал это:
// 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)
Предыдущий подход не возвращает значение в .NET из C. Я также пытался использовать закрепленный 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?
err_NormVec
. Вам не нужно прикреплять двойник, чтобы использовать его в качестве выходного параметра,ref
будет достаточно. - person Ed S.   schedule 11.04.2012