[jawin][DLL][VB] ADODB.recordset
Bonjour,
actuellement j'essaie d'interfacer des DLLs écrites en VB avec une appli java.
JNi étant un brin casse-bonbon, j'ai trouvé jawin.
http://jawinproject.sourceforge.net/
Cette librairie permet de simplifier l'interfaçage.
Ca fonctionne très bien pour les fonctions VB qui retournent des types simples (int, double, string etc) mais là je bute sur une focntion VB qui me renvoie un ADODB.recordset.
La fonction créée par Jawin renvoie un DispatchPtr qui est un objet de la librairie jawin.
Hors je ne sias pas manipuler cet objet, la doc étant assez obscure, et les méthodes et fonction de l'objet en question demandent toutes des paramètres, dont je n'ai pas le moindre début d'idée de ce à quoi ça peut correspondre.
Donc, pour les connaisseurs de jawin, savez vous comment manipuler un DispatchPtr et lui faire sortir les données contenues dedans ?
Avez vous une méthode pour manipuler un ADODB.recordset via jawin ?
Merci pour votre aide.
[DLL][VB][Jawin] java fait joujou avec ADODB.recordset en VB
tout est bien qui finit bien, j'ai fini par trouver.
Je suis pas sur que ça intéresse grand monde, mais sais-t-on jamais, ça peut toujours servir.
le but suprême : Java étant désormais la norme de l'entreprise, mais n'ayant pas le temps ni les moyens de ré-inventer la roue développée en VB, il fallait trouver un moyen d'utiliser les DLLs développées en interne (comprenant toutes les fonctions VB) dans un programme java.
La solution : JNI c'est le standard mais c'est pas très satisfaisant, d'abord parce que la procédure est lourde (il faut faire une nouvelle DLL incluant le fichier *.h généré par javah.exe et la DLL que l'on veut utiliser) et ensuite parce que JNI ne gère que les types simples (les chiffres et les lettres, laurent romechko si tu nous regardes ...)
Donc ce merveilleux site qu'est développez.com propose une librairie : JAWIN http://jawinproject.sourceforge.net/
qui permet très simplement de générer des "classes d'interfaçage" entre la DLL et une appli java à l'aide d'un utilitaire Jawin Type Browser (JTB). On peut utiliser des méthodes VB contenues dans une DLL aussi simplement que si c'était une classe java standard.
Hors, j'ai une fonction DLL qui me renvoie un ADODB.recordset. Le genre de bouzin que JAWIN n'interprète pas et laisse de coté.
La solution :
Passer la librairie windows c:\winnt\system32\MSADO20.TLB dans JTB.
On obtient des "classes d'interfacage" des objets VB ;-))
et après ya plus qu'a jouer au lego.
Fonds est la "super-classe" dérivée d'une des classes contenues dans la DLL.
_Fonds est la classe contenant les méthodes à utiliser (comme FdsIsin(String) par ex).
Par défaut, le ADODB.recordset est typé comme un DispatchPtr par JAWIN, COMPtr est la classe à partir de laquelle DispatchPtr est étendu.
Ces deux classes appartiennent à JAWIN.
_Recordset est la classe générée par JTB à partir de MSADO20.TLB
Code:
1 2 3 4 5 6 7 8 9
|
fds=new Fonds();
objFds=new _Fonds(fds.CLSID);
comPtr=(COMPtr)objFds.FdsIsin("ACT12");
recordset=new _Recordset(comPtr.queryInterface(_Recordset.class));
System.out.println("nb Lignes="+recordset.getRecordCount());
String uneChaine="+recordset.getString(2,1,"|","-","NULL")); |
et voilà.
si vous avez trouvé des méthodes plus simples pour arriver au même résultat, je suis tout ouïe.