allora..questa è la mia nuova dll
codice:
#include <Windows.h>
#include <string>
using namespace std;
extern "C" struct comando_dll
{
char * cmd;
char * p1;
char * p2;
char * pNum;
char * pAgg;
};
extern "C" struct comando
{
string cmd;
string p1;
string p2;
string pNum;
string pAgg;
};
extern "C" _declspec(dllexport) void foo(comando_dll cmd_dll)
{
comando cmd;
cmd.cmd = cmd_dll.cmd;
cmd.p1 = cmd_dll.p1;
cmd.p2 = cmd_dll.p2;
cmd.pNum = cmd_dll.pNum;
cmd.pAgg = cmd_dll.pAgg;
//....
}
e questa è la mia nuova funzione che chiama la dll
codice:
HMODULE hmodule=::LoadLibrary("dll12.dll");
if(hmodule)
{
comando_dll cmd_dll;
cmd_dll.cmd = new char [cmd.cmd.size() + 1];
cmd_dll.p1 = new char [cmd.p1.size() + 1];
cmd_dll.p2 = new char [cmd.p2.size() + 1];
cmd_dll.pNum = new char [cmd.pNum.size() + 1];
cmd_dll.pAgg = new char [cmd.pAgg.size() + 1];
strcpy(cmd_dll.cmd,cmd.cmd.c_str());
strcpy(cmd_dll.p1,cmd.p1.c_str());
strcpy(cmd_dll.p2,cmd.p2.c_str());
strcpy(cmd_dll.pNum,cmd.pNum.c_str());
strcpy(cmd_dll.pAgg,cmd.pAgg.c_str());
Command_Dll foo = (Command_Dll) GetProcAddress(hmodule,"foo");
foo(cmd_dll);
FreeLibrary(hmodule);
delete [] cmd_dll.cmd;
delete [] cmd_dll.p1;
delete [] cmd_dll.p2;
delete [] cmd_dll.pNum;
delete [] cmd_dll.pAgg;
}
return 0;
}
adesso il codice funziona..ma ho notato ciò: provando ad iniettare il codice che utilizza la dll (ossia rendendolo una dll) ho visto che non è del tutto sbagliato ciò che dice http://chadaustin.me/cppinterface.html, infatti le prestazioni sono ridotte, e, se io uso le reference (vedi l'altra discussione) le prestazioni sono ridotte in maniera vereamente considerevole.
Pertanto adesso che lo so, cercherò di usare il meno possibile elementi di c++ (mi limiterò a string e vector) nelle dll e di non usarli proprio al passaggio dei parametri.
grazie di tutto, e sorgeranno porblemi vi terrò aggiornati