Acceder � la donn� source : SQL builder
Ca fait quelques que j'essais de modifier SQL builder qui est vraiment obsolete et nul. J'y suis presque arriv� reste un petit Pb.
Le traitement se fait via une dll sqlb.dll en y passant divers pointeurs dont TQuery* pour requete � traiter.
Tout se passe comme s'il dupliquait TQuery localement dans la dll , effectue tous les traitement normalement , mais la source n'est pas touch�. C'est ce qui se passe pour les fonction avec passage de parametre.
Ex: ((TQuery*)*(p+6))->SQL->Clear(); Effectu� normalement un reset
SQL localement (sqlb.dll) , mais pas au niveau de la source (bc6).
Correctif des infos ci dessous :
c'est un pointeur (AnsiString.c_str()) qui est pass� pour database et SQL.
Lors du retour de la dll c'est les parametres :
SQL = (AnsiString.c_str() ) *(p+4)
DatabaseName = (AnsiString.c_str()) *(p+5)
qui deviennent les parametre en cours de la requette.
Donc c'est bien ces pointeurs qu'il faut traiter reste � trouver le pointeur general AnsiString de SQL ou DatabaseName.
Comment faire pour acc�der directement la source ou la mettre � jour.
Ci dessous les parametres � exploiter � l'entr�e de la dll.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| // entr�e non utilis�
extern "C" int __declspec(dllexport) SQLBuilder(char* m1 ,char * m2)
{
}
// attention ceci avec �a j'ai reussi � creer une fonction:
// sans "_" et en minuscule
extern "C" _export pascal launchModal(void)
{
pm1=_ESP;
ppm =(int*)pm1; // pm2 =2;
/*
SQL = (AnsiString.c_str() ) *(p+4)
DatabaseName = (AnsiString.c_str()) *(p+5)
(TQuery*)*(p+6);
*/
Application->CreateForm(__classid(TForm2), &Form2);
return false;
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
HInstance = hinst;
return 1;
} |