|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Bonjour à tous et à toutes,
je ne savais pas trop où poster ma requète, car elle mélange plusieurs sujets Voilà, je vous expose mon problème: je possède un scanner de codes barre miniature, utilisable sur un port COM (RS232), j'aimerais pouvoir importer les codes barres mémorisés dans celui-ci vers une base de donnée Open Office. J'aimerais le plus possible me passer d'autres programmes que Open Office. J'ai donc trouvé le SDK contenant la DLL possédant toutes les fonctions et commandes pour piloter le scanner, y compris la gestion des ports COM. La DLL est fourni avec ses sources en VC++ 6, ainsi que des exemples d'utilisation de celle-ci en VB6, VC++, Borland C... Ma machine tourne sous Windows 7 64 bits. Il suffit de placer cette DLL dans le répertoire SYSTEM32 pour pouvoir l'utiliser. Le premier test simple que j'ai voulu effectuer avec Open Office 3.3, c'est de pouvoir lire la version de la DLL et de l'afficher, en suivant l'exemple du code VB: Code :
J'ai donc décidé de ressortir mon CD tout poussiéreux de VB6. Sous VB, j'arrive bien à lire la version de la DLL et à l'afficher. Pensant que cela pouvait provenir d'un problème d'incompatibilité avec le système, j'ai essayé le même code oOo avec une machine tournant sous Windows XP, et oOo 3.3 Là, j'arrive bien à lire la version de la DLL et à l'afficher. Sur ma machine Windows 7, j'ai donc installé Visual C 2008 express, et j'ai recompilé la DLL puisque j'avais les sources... J'ai testé cette "nouvelle" DLL comme ci dessus (oOo sous win 7, vb6 sous win 7, oOo sous Win XP) et le fonctionnement reste identique... Sur ce coup là, j'avoue que mes compétences sont très limitées ! Peut être ai je loupé quelque chose ? Merci par avance de vos conseils ! |
||
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Bonsoir,
je viens d'essayer sur une version 32 bits de Windows 7, le problème est identique... Je continue mes investigations ! |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Bon....
je pense que je vais lacher l'affaire, car bcp trop complexe pour mes maigres connaissances... J'ai encore essayé d'une autre manière, cette fois-ci avec Visual Basic express 2008, voici le message que j'obtiens : "Tentative de chargement d’un programme de format incorrect. (Exception de HRESULT : 0x8007000B)" (http://msdn.microsoft.com/en-us/libr...exception.aspx) Donc j'en conclue (peut être trop vite et à tort ?) que cette DLL ne peut pas fonctionner avec Windows 7) |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Je viens de tenter une expérience surprenante, sous Windows XP...
Le code fonctionne parfaitement SANS rien toucher, soit avec un passage par valeur dans la fonction (utilisation du mot clef byval...), et une initialisation de la variable chaine comme dans VB (Dim bstrDllVersion As String * 30) Cependant : - si je remplace "As String * 30" par "As String", la chaine retourné par la fonction reste vide. - si fais comme précedemment, mais que j'initialise la variable avec une chaine quelconque, cela marche à nouveau. - enfin, si en plus je supprime le passage par valeur dans la fonction (j'enlève "ByVal"), alors là, ça renvoie n'importe quoi, pire, OpenOffice se ferme ! Donc entre XP et Seven, il y a un fossé ! |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Bien,
j'ai avancé un petit peu tout seul comme un grand... Voici ce que j'ai constaté (toujours sous S E VEN 64 bits): en placant la DLL dans le répertoire adéquat ("system32"), j'ai les problèmes décrits... en placant la DLL sur le bureau (donc je suppose dans un répertoire quelconque ?), et bien sûr en modifiant les déclarations de fonction en conséquence (soit par exemple Code :
Declare Function csp2GetDllVersion Lib "c:\users\toto\desktop\csp2.dll" (ByVal szDllVersion As String, ByVal nMaxLength As Long) As Long et bien cela fonctionne !!!!!!!!!!!!!!!!!!!!!!!! MIRACLE !!!!!!!!!!! Je sèche concernant l'explication du phénomène (en espérant que ce ne soit pas le fruit du hasard !) Pouvez-vous m'aider ? |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
J'ai vraiment la vague impression que ce sujet n'interresse pas grand monde
|
|
|
00
|
|
|
#7 |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 3 880 ![]() |
je ne connais rien à OOo je ne pourrais pas t'aider plus, mais,
Lorsque on passe une variable de type string à une api, cette string doit obligatoirement être déjà initialisée et de longueur suffisante, comme indiqué dans ton exemple VB6. De plus cette variable doit obligatoirement être passée par valeur. Une string n'est pas une variable comme les autres, c'est en réalité une référence vers une zone mémoire. Le contenu de cette variable est l'adresse de la zone mémoire, mais ce que toi tu utilise en contenu est en réalité le contenu du contenu. Pour que la dll puisse écrire dans la string (et donc la zone mémoire), cette zone mémoire doit déjà être réservée, donc la string initialisée. LA dll attend en paramètre l'adresse de la zone mémoire en question, c'est à dire le "contenu" de la variable string. Si tu passe la string en référence, tu vas en réalité passer l'adresse de l'endroit ou le programme stocke l'adresse de la zone mémoire. La dll va écrire n'importe ou écrasant les autres variables. Donc au mieux tu plante le logiciel, au pire tu crashe le système. Pour ton problème spécifique à W7, c'est peut-être dû au fait que tu es en 64bits. Si OOo est aussi en 64bits et que ta dll est uniquement en 32bits, les 2 ne sont pas compatibles.
__________________
Sevyc64 --- Le partage est notre force NON AU LANGAGE SMS & FAUTES VOLONTAIRES SUR LES FORUMS |
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Bonjour à tous,
je reviens sur le sujet, car j'ai avancé un petit peu Alors j'ai réussi à obtenir quelque chose de cette DLL depuis OpenOffice : j'arrive bien maintenant à "lire" la version de la DLL. C'est le fait de mettre la DLL dans le répertoire systeme qui posait problème, je ne sais pas pourquoi, dans un répertoire quelconque cela fonctionne. Maintenant, j'ai poussé un peu plus loin, car je voudrais utiliser toutes les fonctions proposées par cette DLL, donc pour interroger mon scanner. Les exemples en VB6 et en BC (sous forme d'une appli console) fournis avec le SDK fonctionnent à merveille aussi bien sous WinXP que W7 64bits, les informations contenues dans le scanner sont bien lues. J'ai même poussé un peu plus loin en observant ce qui se passe sur le port COM à l'aide d'un "Null Modem" virtuel (com0com) et Hyperterminal. Mais avec OpenOffice, rien ne vas plus Impossible de communiquer avec le scanner ! J'ai fait un test simple, en suivant une séquence simple indiquée dans la documentation du SDK: Code :
De plus, la DLL contient un mode "debug" qui permet de créer un fichier log de ce qui se passe... Avec VB ou BC, le fichier log se remplit, mais pas avec OpenOffice. On dirait que le fonctionnement avec OpenOffice s'arrête à l'initialisation de la communication. Une piste ? Merci pour votre aide. |
||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Bon,
je crois que j'ai une piste... En cherchant pas mal, j'ai appris que le CS1504 = OPN2001 (qui est le succésseur). Hors, il existe un SDK bcp plus récent pour le OPN2001, avec un DLL pour .net ftp://support.districode.com/Produit...0124/EGFS0124/ Je vais donc faire un essai avec celle-ci ! Je vous tiens au courant. Pascal |
|
|
00
|
|
|
#10 | |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 3 880 ![]() |
Citation:
Tu as tes appels dans 2 fonctions différentes, tu as essayer en mettant dans la même fonction, à la suite l'un de l'autre ?
__________________
Sevyc64 --- Le partage est notre force NON AU LANGAGE SMS & FAUTES VOLONTAIRES SUR LES FORUMS |
|
|
|
00
|
|
|
#11 | |
|
Invité de passage
![]() Inscription : février 2011 Messages : 22 ![]() |
Citation:
j'avoue que j'étais perplexe sur le fait de mettre les deux appels dans la même fonction, mais après avoir essayé moult possibilité, je me suis dit "pourquoi pas"... Et ça marche ! csp2ReadData () me retourne 40 (donc j'ai 40 codes enregistrés dans mon petit scanner...) Donc c'est une grande avancée pour l'instant ! Après, pourquoi ça ne marche pas dans deux routines différentes, je n'en sais rien... En tout cas merci pour ton astuce ! Au fait, est ce que ton pseudo a avoir avec un certain "Commodore C64" ??? :') petite larme de nostalgie ! Je tiens à remercier mon grand frangin de m'avoir permis ainsi de plonger dans le monde informatique ! |
|
|
|
00
|
|
|
#12 | ||
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 3 880 ![]() |
Citation:
Citation:
Perso, j'ai pas connu le Commodore C64, pas assez de moyen à l'époque, et c'était pas la culture de la famille. J'ai connu le MO5 et TO7 à l'école, et quelques années plus tard l'Amstrad CPC464 que mon frère m'avait refilé quand il s'est payé un PC (8086 à l'époque) d'occas Ça nous rajeunis pas tout ça.
__________________
Sevyc64 --- Le partage est notre force NON AU LANGAGE SMS & FAUTES VOLONTAIRES SUR LES FORUMS |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com