[C++] [C#] Usar código C++ en C#

Buenas,

Estoy currando en un proyecto (genérico, no me refiero a una aplicación) en el que tengo que hacer una utilidad de codificación de un formato de datos. Como programa no es nada demasiado complicado, un coñazo pero no difícil. En el proyecto hay gente que está haciendo otras aplicaciones en C#, Python, o lo que mejor conozca cada uno.
Esta utilidad podría ser útil para el resto de gente que trabaja en el proyecto así que querría hacerlo lo más neutro posible, pero es necesario que se pueda usar desde la aplicación que se está haciendo en C#.
¿Es viable programar las clases necesarias en C++ y luego compilar una dll con esas clases para poder aprovechar los métodos de codificación hechos, o usar directamente el código C++?

Y ya de paso aprovecho, el método que codifica los datos devolverá un string con el dato codificado (de longitud variable). ¿Cómo recomendáis hacer esto? Suponiendo que habrá que hacerlo con punteros, ¿podría haber algún problema con tener punteros como argumentos para luego querer usar el código/dlls en C#?

Gracias, salu2
Si es C++ managed no hay fallo en compilarlo a IL y utilizar la DLL desde el proyecto .NET que sea.

Si es C++ de toda la vida, se puede utilizar la librería nativa desde otro lenguaje utilizando los métodos de enlace que ofrezca dicho lenguaje ( por ejemplo, DllImport de .net o JNI desde Java ) . Pero utiliza tipos de datos adecuados para que el marshalling sea usable.

Lo que no se puede hacer fácilmente es picar una dll .net y utilizarla desde un lenguaje nativo. En Windows habría que usar un objeto COM .

Si tiras por Linux, no hay fallo. Librerías objeto y ficheros de cabeceras. Y los que no usen C, que se maten.
buf, llevo desde el lunes con esto a vueltas y me estoy rompiendo la cabeza...
cree la dll usando code blocks y al intentar cargarla en C# me revienta. pensé que podía ser por problemas de tipos y me cree una chorriclase pero nada, me da un error de que intenta acceder a una zona de memoria protegida :-? :-?
la mayoría de las referencias que encuentro a esto es con funciones en dlls, no con clases...
en este hilo está el código y el problema, si alguien puede echarle un ojo se agradece (creo que no es spam):
http://stackoverflow.com/questions/18334962/attempted-to-read-or-write-protected-memory-dllimport

gracias, un saludo.
Busca en la msdn sobre managed and unmanaged C++

Tienes que hacerle un wrapper para hacerle marshalling, está superdocumentado en Internet.
Esto debería servirte:
http://stackoverflow.com/questions/7872 ... sharp-call

En concreto Calling conventions, ya que no utilizas strings.

Suerte
blipi escribió:Esto debería servirte:
http://stackoverflow.com/questions/7872 ... sharp-call

En concreto Calling conventions, ya que no utilizas strings.

Suerte


es que eso es para funciones, con clases las cosa no es la misma.
y si que tengo que usar strings, lo que puse en stackoverflow era la chorrada máxima que hice para tener el tipo más sencillo y sólo quería mostrar el error :p

squarewave escribió:Busca en la msdn sobre managed and unmanaged C++

Tienes que hacerle un wrapper para hacerle marshalling, está superdocumentado en Internet.


al final encontré esto:
http://www.codeproject.com/Articles/14180/Using-Unmanaged-C-Libraries-DLLs-in-NET-Applicatio
y otros post parecidos en esa misma página (que tiene bastante buena pinta).

como tengo que partir de cero, no es por aprovechar nada hecho, voy a tirar directamente por C# que paso de hacer las clases que tengan la funcionalidad, luego otra para hacer marshaling y luego otra más para hacer no sé que movidas...
una pena pero es lo que hay.
5 respuestas