ho letto alcuni documenti che dà semplici esempi di funzioni compatibili con C.Come posso importare dll di una classe C++ all'interno di uno spazio dei nomi
__declspec(dllexport) MyFunction();
Sono okey con quello. Scrivo una piccola applicazione utilizza le funzioni di questa DLL. Ho usato il collegamento esplicito con
LoadLibrary()
funzione. Le funzioni in stile C funzionano senza problemi. Ma quando scrivo la mia lezione come
namespace DllTest
{
class Test
{
public:
__declspec(dllexport) Test();
__declspec(dllexport) void Function(int);
__declspec(dllexport) int getBar(void);
private:
int bar;
};
}
#endif
compila bene e Dll viene creato. Mentre lavoravo con le funzioni in stile C stavo semplicemente prendendo un puntatore a funzione dalle funzioni LoadLibrary() e GetProcAddress (...).
mio utilizzo precedente è
typedef void (*Function)(int);
int main()
{
Function _Function;
HINSTANCE hInstLibrary = LoadLibrary(TEXT("test.dll"));
if (hInstLibrary)
{
_Function = (Function)GetProcAddress(hInstLibrary,"Function");
if (_Function)
{
// use the function
Ma ora non ho idea di come posso istanziare la mia classe? Come posso utilizzare il collegamento esplicito o il collegamento implicito?
Qualsiasi aiuto con un esempio di codice sarebbe apprezzato.
Due punti: in primo luogo, 'TestInterface' non ha bisogno (né dovrebbe avere) del membro dati privato, e in secondo luogo, se sta per passare il nome della funzione a' GetProcAddress', la funzione dovrebbe essere meglio 'extern "C" '(altrimenti, deve passare il nome maciullato). E, naturalmente, in 'allocate_test', intendevi fare' return new Test; ', non' return new TestInterface(); '(che non verrà compilato). –
Hai ragione, l'ho fatto di fretta e ho perso alcune cose. – mfontanini