Merci de m'orienter si je ne suis pas dans le bon groupe.
J'ai écris une DLL ActiveX en VB6 pour interfacer un capteur de notre cru.
L'utilisation par VBSCRIPT ou VB fonctionne bien. Un utilisateur écrit une
application sous Windev et me signal que mon contrôle ne fonctionne pas. Y
a t'il une précaution à prendre en VB, une astuce en WinDev (que je ne
connais pas) ou faut il réécrire la DLL en C++ ?
Merci pour vos suggestions.
--
Embryon de site : http://gilles.ronsin.free.fr
ICQ 70141405 - MSN: gilles...@msn.com
Les femmes qui veulent être les égales des hommes,
manquent cruellement d'ambition. (Wollinski)
Fabien
La connaissance s'accroit quand on la partage.JBC
"Gilles RONSIN" <gilles...@free.fr.invalid> a écrit dans le message de
news: ak0cg9...@d2r2.h07b8f845.invalid...
(...)
> J'ai écris une DLL ActiveX en VB6 pour interfacer un capteur de notre cru.
> L'utilisation par VBSCRIPT ou VB fonctionne bien. Un utilisateur écrit une
> application sous Windev et me signal que mon contrôle ne fonctionne pas. Y
> a t'il une précaution à prendre en VB, une astuce en WinDev (que je ne
> connais pas) ou faut il réécrire la DLL en C++ ?
>
(...)
a priori, les DLLs sont compilees suivant un format standard, donc VB ou C++
c'est pareil.
Il y a un piege (au moins) a connaitre en windev, c'est qu'on ne peut pas
passer une zone de plus de 64 Ko. (de memoire. valeur à confirmer)
Utilisez-vous ca ?
Il faut assi declarer les pointeurs en entiers longs car pas de type
pointeur en windev.
Pour les chaines, ne faut pas utiliser des variables du type chaine.
il faut utiliser chaine asciiz (chaine nul-terminee de taille fixee au
depart)
Enfin tout ca suppose que l'erreur ne vienne pas de votre controle, mais du
programme windev qui l'appelle.......
Et ce sont des pieges dans lesquels on tombe tres vite, et donc dont on
trouve tres vite la solution...
Ca m'etonnerait que le programmeur n'ait pas pense à ca...
Pourriez-vous etre plus precis sur le "ne fonctionne pas" ?
--
Fabrice Burghgraeve
Computer & Services
f_pas_de_spa...@computeretservices.com
(enlevez le -pas_de_spam_ pour me répondre en privé)
--
Cordialement
Christophe Charron
"Gilles RONSIN" <gilles...@free.fr.invalid> a écrit dans le message de
news: ak0cg9...@d2r2.h07b8f845.invalid...
> Faudrait d'abord savoir qu'est-ce qui ne fonctionne pas. Est-ce le
> passage de parametres qui coincent ?
C'est vague pour moi aussi. Extrait du message :
"L'intégration du contrôle dans Visual Basic fonctionne, cependant mon
plus gros problème réside dans le fait que je ne peux pas l'insérer dans
mon programme Windev.
Le contrôle ne semble pas accessible et ses méthodes encore moins.
Pourtant,
le contrôle et la DLL ont été enregistrées correctement avec regsvr32.
Avez-vous une idée sur la question?"
> La connaissance s'accroit quand on la partage.JBC
(PS ne serais-ce pas de JCB plutôt ?)
> bonjour.
>
> (...)
>> J'ai écris une DLL ActiveX en VB6 pour interfacer un capteur de notre
>> cru. L'utilisation par VBSCRIPT ou VB fonctionne bien. Un utilisateur
>> écrit une application sous Windev et me signal que mon contrôle ne
>> fonctionne pas. Y a t'il une précaution à prendre en VB, une astuce
>> en WinDev (que je ne connais pas) ou faut il réécrire la DLL en C++ ?
>>
> (...)
> a priori, les DLLs sont compilees suivant un format standard, donc VB
> ou C++ c'est pareil.
> Il y a un piege (au moins) a connaitre en windev, c'est qu'on ne peut
> pas passer une zone de plus de 64 Ko. (de memoire. valeur à confirmer)
> Utilisez-vous ca ?
Je ne pense pas. C'est tout petit. Juste une interface entre notre
capteur et un envoi en mode chaine. Voici un vbscript qui l'utilise :
Dim Capteur
Set Capteur=CreateObject("Madll.Acquisition")
Capteur.Init
do while Capteur.isRunning
wscript.echo Capteur.Sample
loop
msgbox "c'est fini"
> Il faut assi declarer les pointeurs en entiers longs car pas de type
> pointeur en windev.
> Pour les chaines, ne faut pas utiliser des variables du type chaine.
> il faut utiliser chaine asciiz (chaine nul-terminee de taille fixee au
> depart)
C'est peut être la que ça coince. Mais je suis quasi obligé de
transmettre des chaines de longeur variable.
> Enfin tout ca suppose que l'erreur ne vienne pas de votre controle,
> mais du programme windev qui l'appelle.......
J'espère mais vbscript et vb6 peuvent l'utiliser. Ca prouve qu'il est un
peu fonctionnel :-) non ?
> Et ce sont des pieges dans lesquels on tombe tres vite, et donc dont
> on trouve tres vite la solution...
On est un peu concurrent mais sur un projet commun, ça limite les
possibilités d'échange :-(
> Ca m'etonnerait que le programmeur n'ait pas pense à ca...
Je ne connait pas son niveau et le mien est nul en Windev
> Pourriez-vous etre plus precis sur le "ne fonctionne pas" ?
Dans la réponse à Fabienf j'ai cité la réponse..
Merci de t'être penché sur mon problème.
> Quelle version de Windev ?
Je lui poserais la question....
Heu, Fabrice... c'est une DLL *ActiveX*, pas une DLL standard.
Avec les AppelDll(), ça ne marche pas. Il faut utiliser la syntaxe OLE.
Laotseu
Et si la chaine qui est de taille variable est retournee, la solution
courante est de l'allouer et de retourner le pointeur, et egalement la
longueur de la chiane allouee.
Apres, pour recuperer ca dans windev, il me semble qu'il faut creer une
variable de type chaine (de windev),
l'initialiser avec nbcar espaces (pour que windev alloue la memoire
necessaire), puis recopier le bloc de memoire alloue dans la chaine.
Pas de pb a priori pour utiliser une DLL ActiveX VB6 depuis Windev, mais
attention : il ne faut pas utiliser la syntaxe AppelDLL(), mais la
syntaxe OLE.
Dim Capteur
Set Capteur=CreateObject("Madll.Acquisition")
Capteur.Init
do while Capteur.isRunning
wscript.echo Capteur.Sample
loop
msgbox "c'est fini"
< A corriger éventuellement, ça fait quelques mois que je n'ai pas fait
ça, et pas la doc sous le nez>
Capteur est un objet OLE "MaDll.Acquisition")
Capteur>>Init()
TANTQUE Capteur>>isRunning()
// wscript ???
FIN
Je ne garanti pas la syntaxe pour la création de l'objet OLE (cf la
doc), mais grosso-modo c'est quelque chose du genre...
Laotseu
> Pas de pb a priori pour utiliser une DLL ActiveX VB6 depuis Windev,
> mais attention : il ne faut pas utiliser la syntaxe AppelDLL(), mais
> la syntaxe OLE.
> < A corriger éventuellement, ça fait quelques mois que je n'ai pas
> fait ça, et pas la doc sous le nez>
> Capteur est un objet OLE "MaDll.Acquisition")
> Capteur>>Init()
>
> TANTQUE Capteur>>isRunning()
> // wscript ???
wscript.echo Capteur.Sample permet de retourner sur la console la chaine
de caractère "Capteur.Sample". L'utilisateur lui, devra interprêter le
contenu de la chaine.
> FIN
> Je ne garanti pas la syntaxe pour la création de l'objet OLE (cf la
> doc), mais grosso-modo c'est quelque chose du genre...
Loatseu l'a dit.
Merci vénérable sage. Ta réponse sera transmise à mon alter ego de
l'autre entreprise.
--
Fabrice Burghgraeve
Computer & Services
f_pas_de_spa...@computeretservices.com
(enlevez le -pas_de_spam_ pour me répondre en privé)
"laotseu" <bde...@nospam.free.fr> a écrit dans le message de news:
(...)
sur pcsoft.fr.windev, ce message (qui ne prouve pas que ca ne parche pas):
--- extrait ---
J'utilise un activeX dans une fenêtre Windev 5.5 et j'ai de nombreux
problèmes inexpliquables. D'après votre expérience, la gestion des activex
est elle robuste ou dois je chercher ailleurs les solutions à mes problèmes
?
--- fin extrait ---
C'est quelle version de windev au fait ?
Merci à tous de votre collaboration. Les éléments fournits par Laotseu ont
permis la connexion du capteur à un environnement WinDev.