Pregunta

Tengo el siguiente método en mi código Borland C ++,

static bool UploadBitstream(void)
{
   //Some code Implementation
}

Y estoy tratando de convertirlo a DLL y acceder a él en C #.

¿Cuáles son los pasos que debo seguir? para convertir el código DLL y luego usarlo en C # ??

¿Fue útil?

Solución

Primero, debe asegurarse de que los métodos se definan externamente. Luego, debe declarar el método stdcall o la convención de llamada pascal y marcarlos como dllexport. Vea la lista de códigos a continuación (esta es una memoria antigua para mí, así que perdón si estoy un poco fuera de los compiladores modernos de Borland C ++).

// code.h
extern "C" {

#define FUNCTION __declspec(dllexport)

FUNCTION int __stdcall   SomeFunction(int Value);    

En el principal

#include "code.h"

FUNCTION int __stdcall SomeFunction(int timesThree)
{
    return timesThree * 3;
}

Otros consejos

Una vez que haya compilado su DLL, todo lo que debe hacer en .NET para acceder es usar la propiedad DLLImport.

public class stuff
{
    [DLLImport("somedll.dll")]
    public static extern void UploadBitstream();
}

Si necesita punteros o algo así, se vuelve más complicado, pero para las funciones nulas es así de simple.

Debe tenerse en cuenta que una vez que invoque esa función, el programa cargará el archivo dll y no se lanzará hasta que se cierre el programa. Puede cargar dlls dinámicamente, pero eso es mucho más complicado. Puedo explicarlo aquí si tienes una necesidad.

Cuida tu terminología.
En su ejemplo, UploadBitstream es una función, no un método.
Si de hecho es un método en una clase, entonces es muy difícil usar clases de archivos DLL compilados por Borland.

Si su código es en realidad C no C ++, debería poder crear una DLL compatible para sus funciones simples de estilo C con C ++ Builder.

Vea la siguiente pregunta SO: Use un dll de Un programa de C ++. (Borland C ++ Builder y en general) donde enumero varias configuraciones del compilador que también se aplicarán a la creación de archivos DLL compatibles.

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