Pregunta

Me gustaría crear un proyecto C # e implementar el código nativo existente (C ++). ¿Alguien sabe de algún buen tutorial al respecto?

¡Gracias!

¿Fue útil?

Solución

Puede usar P / Invoke y puede llamar a métodos no administrados. Te publicaré algunos ejemplos: Esto es una referencia a la documentación oficial de MSDN. Este es un sitio web comunitario mantenido con la mayoría de las bibliotecas comunes no administradas de Windows junto con firmas de métodos y ejemplos

Otros consejos

Si su código C ++ se administra (como usted dice), le sugiero que lo deje como C ++ a menos que tenga una muy buena razón para: futuros ensambles de C # (etc.) debería poder hacer referencia a él "tal cual".

Supongo que implementa el código existente quiere decir que desea llamarlo desde C #, con cambios mínimos en el código C ++.

Soy fan y comprador reciente del libro C ++ / CLI en acción que tiene un par de capítulos de muestra útiles en línea.

Esta introducción en CodeProject es un buen punto de partida.

El autor de C ++ / CLI en acción tiene varios artículos sobre CodeProject, desplácese hacia abajo hasta la sección C ++ / CLI en su índice .

El el artículo de Wikipedia sobre P / Invoke tiene varias razones por las que es posible que no desee para usar ese enfoque, con el que estoy de acuerdo:

  • pérdida de soporte de escritura por parte del compilador
  • posibles problemas de alineación o tipo de datos, ya que debe asignar los tipos a mano
  • necesita fijar objetos recolectados con basura

El mejor punto de partida en MSDN es el artículo resumen .

Probablemente la forma más fácil de hacer esto es crear un proyecto C ++ / CLI, que le permitirá mezclar C ++ administrado y no administrado. A continuación, puede ajustar sus clases de C ++ no administradas existentes con un contenedor .Net administrado al que su código C # puede llamar directamente. La revista MSDN tiene un buen artículo en C ++ / CLI.

Interop solo será realmente útil para llamar a funciones de estilo C. Realmente no puedes usarlo para interactuar con clases de C ++ puras.

Aprendí esto al hacerlo, así que no tengo un buen tutorial, pero hay un par de cosas que debes tener en cuenta: C ++ administrado y C ++ / CLI se integran con código no administrado con muy pocas costuras feas. Este no es el caso con C #. En C ++ administrado, es bastante posible hacer algo como esto:

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

mientras que en C # tendría que P / Invocar en SetWindowText, no es que realmente lo haga: es solo un ejemplo simple, pero debe tener en cuenta que el compilador administrado de C ++ es una combinación extraña de hacer mucha interoperabilidad para usted de manera transparente y sin hacer nada por usted al mismo tiempo (es decir, no hará un marashalling implícito).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top