No soy realmente un tipo CS, así que si alguno de ustedes genios aquí puede señalarme en la dirección correcta, estaré eternamente agradecido.flotar * de C a C#
que tienen una función de línea de comandos c-código que se utiliza para escribir sus resultados en un archivo. Convertí para devolverlo de datos a través de un flotador * matriz a un programa en C++ como tales (para evitar archivo constante I/O):
float * mgrib(int argc, char **argv)
Esto funcionó perfectamente. Ahora necesito incluir esto en un programa C#, y aquí es donde las cosas se ponen feas.
Lo primero que hice para evitar el char ** fue convertir los argumentos en una serie de bool. Eso funcionó bien si permití que todavía se volcara al archivo.
El problema está haciendo juegos malabares la matriz flotador c-estilo en C#. Dentro del código c, se asignó con malloc.
Así que aquí es todo lo que he intentado sin éxito (Sé que el tamaño de la matriz):
hacer una función "libre" para exportar a llamar desde C# para liberar la memoria cuando estoy Estoy hecho con eso. Después de algunos bucles, C# se bloquea sin previo aviso.
Libere el malloc de C# con Marshal.FreeCoTaskMem. Mismo resultado.
Mueva el flotador * a un argumento y elimine el c-code malloc. (Void mgrib (..., flotar datos *, ...)
__A) Asignar con Marshal.AllocCoTaskMem. Libéralo con Marshal.FreeCoTaskMem.
__b) Uso Marshal.Copy a asignar. Liberarlo con Marshal.FreeCoTaskMem (¿Tal vez esto está mal?)
He incursionado en casi todo lo que pude encontrar en internet. Por favor, avíseme si se necesita más información. Espero que esto sea solo un concepto simple que me estoy perdiendo.
Olvidar el prototipo C y escribir una limpia con C#. Devuelve una matriz flotante (flotante []) en su lugar. – stefan
Por favor, publique su C# code –
¿Está tratando de hacer esto bien o fácilmente? La manera más fácil sería dejar ambos programas casi intactos, pero tener la comunicación a través de una tubería en lugar de un archivo. Para hacerlo bien, probablemente sea mejor que escriba todo el programa en un idioma. –