Estamos creando una aplicación en C#, .net 4.0, en Win7 x64, dirigida a x32.PInvoke, punteros y copia de matriz
Estamos utilizando una biblioteca de terceros en nuestra aplicación. Entendemos que esta biblioteca está escrita usando C++. Sin embargo, para permitir que los desarrolladores de C# usen esta biblioteca, la han envuelto usando P/Invoke, así es como llamamos a las funciones API.
Una de las llamadas a la API es el siguiente:
ReadFromDevice(int deviceAddress, int numBytes, Byte[] data);
Esta función lee numBytes de datos desde un dispositivo externo y lo coloca en datos []. Como puede ver, espera ver una matriz C Byte como el tercer argumento. Ahora, nuestro problema es que nos gustaría leer los datos en una ubicación arbitraria en una matriz predeclarada. Por ejemplo:
Byte[] myData = new Byte[1024*1024*16];
ReadFromDevice(0x100, 20000, &myData[350]) // Obviously not possible in C#
Si estuviéramos utilizando C/C++, esto sería trivial. Dado que la API subyacente está escrita en C++, creo que también deberíamos poder hacer esto en C#, sin embargo, no puedo encontrar la manera de hacerlo en C#. ¿Tal vez de alguna manera podemos llamar a la biblioteca subyacente no a través de la interfaz P/Invoke suministrada y escribir una interfaz personalizada?
Cualquier idea sería apreciada.
Saludos,
No hay conversión de bytes '*' 'a byte [] ', este código ni siquiera compilar. Si él tuviera control sobre la fuente de C#, eso sería una cosa, pero no suena como lo hace a partir de la pregunta original. –
Dicho esto, al leer nuevamente la pregunta * suena * como si el OP tuviera acceso también a la biblioteca C++, por lo que simplemente debería sugerirle que agregue su propio DllImport y cambie la firma para aceptar un 'byte *' en lugar de un 'byte []', entonces esto funcionaría. Eliminando downvote. –
" Estamos creando una aplicación en C#, .net 4.0, en Win7 x64, segmentando x32. Estamos utilizando una biblioteca de terceros en nuestra aplicación. Entendemos que esta biblioteca está escrita usando C++. Sin embargo, para dejar que C# los desarrolladores usan esta biblioteca, la han envuelto usando P/Invoke, así es como llamamos a las funciones API ". ¡Así que tienen control sobre C# y están escribiendo un contenedor para una biblioteca de C++! – N4rk0