Re: Как осуществить маршалинг SAFEARRAY в .Net?
От: D.Triton Украина  
Дата: 21.12.04 16:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconDefaultMarshalingForArrays.asp


А>Оно?


А>
данное сообщение получено с www.gotdotnet.ru

А>ссылка на оригинальное сообщение


Не совсем. Там не говорится, как передать многомерный массив.
Есть пример про передачу одномерного.

Но продлема в том, что при

просмотре полученной сборки при импортировании
ildasm.exe я увидел:


instance void Set_Data([in] class [mscorlib]System.Array marshal( safearray float64) point,
[in] class [mscorlib]System.Array marshal( safearray float64) cluster) runtime managed internalcall
{

}


Т.е. есть System.Array


Но если
написать (делаем массив 3х3)

CKMeans.ICKMeansMethod ck = new CKMeans.CCKMeansMethodClass();

double [][] info = new double[3][];
info[0] = new double[] {1, 2, 3};
info[1] = new double[] {1, 2, 3};
info[2] = new double[] {1, 2, 3};

ck.Set_Data(info, null);

То будет Exception:

System.Runtime.InteropServices.SafeArrayTypeMismatchException: Specified array was not of the expected type.
at CKMeans.CCKMeansMethodClass.Set_Data(Array point, Array cluster)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.