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;
}