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