Esporre i metodi C ++ di Borland a C #
-
06-07-2019 - |
Domanda
Ho il seguente metodo nel mio codice C ++ Borland,
static bool UploadBitstream(void)
{
//Some code Implementation
}
E sto provando a convertirlo in DLL e ad accedervi in ??C #.
Quali sono i passaggi che devo seguire per convertire il codice DLL e poi usalo in C # ??
Soluzione
Innanzitutto, devi assicurarti che i metodi siano definiti esternamente. Quindi è necessario dichiarare il metodo stdcall o pascal chiamando convention e contrassegnarli come dllexport. Vedi l'elenco dei codici qui sotto (questa è un'antica memoria per me, quindi scusami se sono un po 'fuori dai moderni compilatori Borland C ++).
// code.h
extern "C" {
#define FUNCTION __declspec(dllexport)
FUNCTION int __stdcall SomeFunction(int Value);
In generale
#include "code.h"
FUNCTION int __stdcall SomeFunction(int timesThree)
{
return timesThree * 3;
}
Altri suggerimenti
Dopo aver compilato la tua DLL tutto ciò che dovresti fare in .NET per accedervi è usare la proprietà DLLImport.
public class stuff
{
[DLLImport("somedll.dll")]
public static extern void UploadBitstream();
}
Se hai bisogno di puntatori o qualcosa del genere diventa più complicato, ma per funzioni nulle è così semplice.
Va ??notato che una volta richiamata quella funzione, la dll verrà caricata dal programma e non verrà rilasciata fino alla chiusura del programma. Puoi caricare dinamicamente le dll ma questo è molto più complicato. Posso spiegarlo qui se ne hai bisogno.
Guarda la tua terminologia.
Nel tuo esempio UploadBitstream non è una funzione, un metodo.
Se si tratta effettivamente di un metodo in una classe, è molto difficile utilizzare le classi delle DLL compilate da Borland.
Se il tuo codice è in realtà C non C ++, dovresti essere in grado di creare una DLL compatibile per le tue semplici funzioni in stile C con C ++ Builder.
Vedi la seguente domanda SO: Utilizza una dll da un programma c ++. (borland c ++ builder e in generale) dove elenco le varie impostazioni del compilatore che si applicheranno anche alla creazione di DLL compatibili.