E' valsa la pena venire a lavorare oggi... ho finalmente
risolto un problema che mi assillava da un pò!
Una dll esterna:
[DllImport("GeoSqlServer.dll", EntryPoint = "Area",
SetLastError = true)]
private static extern double AreaEx(IntPtr shape, uint shapeLength);
chiamata da codice .NET generico (console o winform) in questo modo funziona
correttamente:
fixed (byte* pArray = &((byte[])shape)[0])
{
return AreaEx(pArray, (uint)shape.Length);
}
ma in codice CLR improtato in SqlServer 2005 il valore di
ritorno è NaN!
Ho riscritto il codice della dll per ritornare void e prendere il valore di
ritorno da un paramentro passato come puntatore:
[DllImport("GeoSqlServer.dll", EntryPoint = "Area2", SetLastError = true)]
unsafe private static extern double Area2Ex(byte* pArray, uint length, double* output);
e questo codice funziona perfettamente!
fixed (byte* pArray = &((byte[])shape)[0])
{
double output = 0;
double* pOutput = &output;
Area2Ex(pArray, (uint)shape.Length, pOutput);
return output;
}
Meglio così, no?
Prima o poi qualcuno, magari alla microsoft visto che ho postato la segnalazione,
mi spiegherà il perchè dell'errore...
powered by IMHO