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 : S�lectionner tout - Visualiser dans une fen�tre � part
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; }
Partager