¿Es posible utilizar un archivo .lib de C ++ desde un progtwig de C #?

¿Es posible utilizar un archivo .lib de C ++ desde un progtwig de C #?

No. Solo puede usar una .dll completa de un progtwig de C #.

Hay muchas maneras. Lea sobre “interoperabilidad” en MSDN.

Una forma es exponer el lib como un DLL y luego usar pinvoke para llamar a estas funciones desde un proyecto de C #. Eso te limita a una interfaz de estilo C, sin embargo.

Si su interfaz es más compleja (por ejemplo, orientada a objetos), puede crear una capa C ++ / CLI que expondrá la estructura de clases de la biblioteca a su progtwig C #. Esto significa que tendrá que crear un proyecto administrado de C ++ (o C ++ / CLI como se le llama ahora); luego diseñe una interfaz en código administrado que se implementará mediante llamadas a C ++ nativo (es decir, su lib).

Otra forma de hacerlo es envolver su lib con una interfaz COM. Pero COM es un dolor, así que yo no …

No directamente. Puede crear un conjunto de C ++ / CLI que consume la lib y luego acceder a eso desde C #, o puede envolver la lib como una DLL.

Lo que necesita es un contenedor administrado (C ++ / CLI) alrededor de la biblioteca C / C ++ nativa con la que está trabajando.

Si está buscando algún libro de C ++ / CLI, recomendaría el C ++ / CLI de Nishant Sivakumar en acción.

Ya respondí para envolverlo pero he aquí un ejemplo . ¡Buena suerte!

Me gustaría echar un vistazo a Swig , utilizamos esto para un buen efecto en nuestro proyecto para exponer nuestra API de C ++ a otras plataformas de idiomas.

Es un proyecto bien mantenido que construye efectivamente una envoltura delgada alrededor de su biblioteca de C ++ que puede permitir que lenguajes como C # se comuniquen directamente con su código nativo, lo que le ahorra la molestia de tener que implementar (y depurar) el código de pegamento.

Eso depende, ¿tienes alguna limitación en este escenario?

Si tiene un archivo lib, debería ser posible primero comstackrlo en un archivo DLL, en segundo lugar, exponer las funciones que desea llamar en la interfaz DLL, y en tercer lugar, llamarlos usando métodos nativos de C # (eche un vistazo a pinvoke.net sobre cómo hacer este bit).

no puedes usar una biblioteca, pero como dicen los demás, puedes usarla si la envuelves en una DLL.

swig puede tomar los encabezados de tu .lib, y si no son demasiado complejos, puede generar la dll para ti que luego llamarías con un pinvoke de c # que también sería generado por swig.

Si su biblioteca es compleja y tiene punteros inteligentes con referencias en todas partes, debería encontrar una alternativa.