2008-10-01 15 views

Respuesta

1

No. Solo puede usar un archivo .dll completo desde un programa C#.

6

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

8

Hay muchas maneras. Lea sobre "interoperabilidad" en MSDN ...

Una forma es exponer la lib como una DLL, y luego usar pinvoke para llamar a estas funciones desde un proyecto de C#. Eso te limita a una interfaz 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 lib a su programa 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 envolviendo su lib con una interfaz COM. Pero COM es un dolor, entonces yo no ...

2

Ya he respondido para envolverlo, pero aquí hay un example. ¡Buena suerte!

3

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

Si están en busca de cualquier libro de C++/CLI se lo recomiendo de Nishant Sivakumar C++/CLI in Action

0

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

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

2

Me gustaría echar un vistazo a swig, lo usamos con buenos resultados en nuestro proyecto para exponer nuestra API de C++ a otras plataformas de idiomas.

Es un proyecto bien mantenido que crea un envoltorio fino alrededor de su biblioteca C++ que permite que idiomas como C# se comuniquen directamente con su código nativo, ahorrándole la molestia de tener que implementar (y depurar) el código de pegamento.

0

no puede usar una lib, pero como dicen los demás, puede usarla si la envuelve en una dll.

swig puede tomar los encabezados de su .lib, y si no son demasiado complejos puede generar el dll para usted que luego llamaría con un pinvoke de C# que también se generaría mediante swig.

si su biblioteca es compleja y tiene referencia punteros inteligentes contados en todas partes, debe encontrar una alternativa.

Cuestiones relacionadas