Tengo un archivo de biblioteca C++ (.lib). ¿Cómo puedo acceder a las funciones dentro de este desde C#? He leído que podría envolver el archivo de la biblioteca en un C++ dll y exponer las funciones de esa manera. ¿Es esa la única forma? No soy el propietario del código, por lo que mis opciones son limitadas.Accediendo a una biblioteca .lib de C++ desde C#
Respuesta
Envuelva la biblioteca de C++ con un conjunto de C++/CLI.
C++/CLI le permite mezclar código administrado y no administrado, sirviendo como un puente entre C# y C++ nativo. En realidad es muy sencillo y relativamente fácil de hacer, aunque puede ser tedioso si tiene muchas clases/funciones para envolver.
Here es un ejemplo.
No puede acceder directamente a un archivo de biblioteca C++ (.lib). La mejor manera es tener un contenedor no administrado alrededor de su código no administrado. Referencia DllImportAttribute
.
Hay un buen ejemplo de ello es el uso en el documento de ayuda de MSDN:
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
También tenga en cuenta: Usted puede tener una C++ contenedor administrado alrededor de su biblioteca de C++, pero es mejor para escribir su envoltorio en no administrado código C++.
DllImport puede importar * .lib? No lo sabía :) –
Sí, mi respuesta fue un poco apresurada. Leí C++ y al instante pensé que se refería a un ensamblado compilado. Me perdí la parte .lib porque algunas personas usan el término biblioteca de manera similar al ensamblaje. –
- 1. Llamando a la función de biblioteca C/C++ desde PHP
- 2. Biblioteca estática de C++: ¿cómo crear un archivo .a desde .lib?
- 3. Biblioteca compartida de C++ llamada desde C
- 4. Llamar a una biblioteca de C# desde python
- 5. Accediendo a C# Objetos de tipo anónimo
- 6. ¿Está accediendo a una variable en C# una operación atómica?
- 7. Accediendo al ScrollViewer de un ListBox desde C#
- 8. Elegantemente llame a C++ desde C
- 9. biblioteca C++ con interfaz c
- 10. Wrap C++ lib con Cython
- 11. C++ Accediendo a los elementos vectoriales
- 12. Biblioteca de Benchmarking utilizable desde C#
- 13. De la biblioteca estática MinGW (.a) a la biblioteca estática de Visual Studio (.lib)
- 14. Creando una biblioteca dinámica con haskell y usándola desde C++
- 15. ¿Llamar a C/C++ desde Python?
- 16. accediendo a localhost desde vm
- 17. Escribir un contenedor C++ para una biblioteca C
- 18. Accediendo al control del formulario desde otra clase C#
- 19. ¿Cómo construyo una biblioteca de importación (.lib) Y una DLL en Visual C++?
- 20. accediendo a R desde SAS
- 21. Accediendo a RequestContext desde global.asax
- 22. ¿Compila usando MONO - C# con referencia a una biblioteca de C#?
- 23. ¿Cómo usar una biblioteca C++ en una aplicación C#?
- 24. Llamar a la biblioteca Java desde Objective C en Mac
- 25. Biblioteca de C++ de llamada en C#
- 26. alternativa gettext lib en C?
- 27. biblioteca c/C++ NLP
- 28. Llamar a una función de biblioteca C++ en vimscript
- 29. ¿Cómo hace referencia a una biblioteca de clase C# desde una aplicación metropolitana Win8 Javascript?
- 30. Localización de C biblioteca estándar
Gracias. Este es el enfoque que utilizaré ya que no puedo modificar la biblioteca original de C++. –