Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Execution d'une Sub VB6 à partir d'une application distincte

7 réponses
Avatar
Patrick EVEN
Bonjour,

J'aimerais savoir comment exécuter du code VB6 (une Sub par exemple)
écrit dans un module du Projet1 sans formulaire,
à partir d'un click sur le bouton d'un formulaire du Projet2.

Remarque :

Pour les tests de faisabilité, Projet2 est en VB6,
mais à terme, je ce sera plutôt du Java ou du C++.

Merci d'avance pour vos suggestions.

Cordialement,
Patrick EVEN

7 réponses

Avatar
[___FreGoLi___]
Bonjour,

Pour appeler une sub (ou une procédure in french) dans un module, à partir
de l'extérieur, il faut au minimum pouvoir la référencer (donc la connaitre).
La seule solution serait d'écrire une dll.

Un module peut être complié en VB sous forme de DLL.

Sauf qu'en standard, les exports des DLL ecrites en VB ne sont pas standard
justement. Les DLL vb ne sont pas appelables par des programmes ecrits en
autre chose qu'en VB.

Sauf que, et heureusement, quelqu'un y a réfléchi, et c'est là:

http://www.windowsdevcenter.com/pub/a/windows/2005/04/26/create_dll.html?page=1

Et cela te permet d'écrire une DLL en VB et d'obtenir une "vraie" DLL.

J'espète que cela te satisfaira...

Patrick EVEN" a écrit :

Bonjour,

J'aimerais savoir comment exécuter du code VB6 (une Sub par exemple)
écrit dans un module du Projet1 sans formulaire,
à partir d'un click sur le bouton d'un formulaire du Projet2.

Remarque :

Pour les tests de faisabilité, Projet2 est en VB6,
mais à terme, je ce sera plutôt du Java ou du C++.

Merci d'avance pour vos suggestions.

Cordialement,
Patrick EVEN





Avatar
ng
Salut,

J'aimerais savoir comment exécuter du code VB6 (une Sub par exemple)
écrit dans un module du Projet1 sans formulaire,
à partir d'un click sur le bouton d'un formulaire du Projet2.

Remarque :

Pour les tests de faisabilité, Projet2 est en VB6,
mais à terme, je ce sera plutôt du Java ou du C++.

Merci d'avance pour vos suggestions.



Ca se fait tres bien via COM (composant activex) ou via une dll classique
(mais il faudra utiliser vbadvance pr que vb puisse compiler une dll
classique).


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
ng
Salut,

Un module peut être complié en VB sous forme de DLL.



En fait en VB c'est surtout les classes pas les mosules qu'on passe sous
forme de DLL.

Sauf qu'en standard, les exports des DLL ecrites en VB ne sont pas
standard justement. Les DLL vb ne sont pas appelables par des programmes
ecrits en autre chose qu'en VB.



Bien sur que si c'est du COM, on peut tres bien s'en servir avec n'importe
quel langage capable d'utiliser COM (C++, VBSCript........ la liste est
longue)

Sauf que, et heureusement, quelqu'un y a réfléchi, et c'est là:


http://www.windowsdevcenter.com/pub/a/windows/2005/04/26/create_dll.html?page=1



Interessant. On peut le faire aussi avec des outils comme vbAdvance.

Et cela te permet d'écrire une DLL en VB et d'obtenir une "vraie" DLL.



Oui en effet.

Nicolas.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
Driss HANIB
bonjour Patrick,

une solution qui vaut ce qu'elle vaut..
Il faudrait que dans ton projet 1, tu puisses gérer les paramètres avec la
fonction 'Command$'
Tu compiles et dans ton projet 2 tu 'lances le programme1 avec les
paramètres choisis.

Exemple

Dans ton Projet2 tu peux écrire

Ret = Shell ("Programme1.exe /Choix1")
à vérifier la syntaxe.

Dans ton projet1 tu mets dans ta procédure de départ
select case Command$ 'si tu n'as qu'un parmètre à la fois
case "/Choix1"
' déclenchement de la procédure choisie
case else
end select

' ceci ne marche bien que si ton programme est déclenché uniquement par ton
prog 2 et se referme ensuite..
sinon éffectivement les autres réponses (que je ne maitrise pas du tout)
semblent bonnes (je ne juge pas).

Driss

"Patrick EVEN" a écrit dans le message de news:
%
Bonjour,

J'aimerais savoir comment exécuter du code VB6 (une Sub par exemple)
écrit dans un module du Projet1 sans formulaire,
à partir d'un click sur le bouton d'un formulaire du Projet2.

Remarque :

Pour les tests de faisabilité, Projet2 est en VB6,
mais à terme, je ce sera plutôt du Java ou du C++.

Merci d'avance pour vos suggestions.

Cordialement,
Patrick EVEN




Avatar
[___FreGoLi___]
Salut;

Cette solution marchera si l'appel peut être asynchrone, c'est à dire si
l'appelant n'a pas besoin d'attendre la fin de l'exécution de la sub pour
continuer. Sinon, il faudrait dans l'appelant, attendre la fin de l'exécution.

De plus il reste le passage de paramètres éventuels.

Je ne pense pas qu'il s'en sorte autrement qu'avec une DLL classique.


"Driss HANIB" a écrit :

bonjour Patrick,

une solution qui vaut ce qu'elle vaut..
Il faudrait que dans ton projet 1, tu puisses gérer les paramètres avec la
fonction 'Command$'
Tu compiles et dans ton projet 2 tu 'lances le programme1 avec les
paramètres choisis.

Exemple

Dans ton Projet2 tu peux écrire

Ret = Shell ("Programme1.exe /Choix1")
à vérifier la syntaxe.

Dans ton projet1 tu mets dans ta procédure de départ
select case Command$ 'si tu n'as qu'un parmètre à la fois
case "/Choix1"
' déclenchement de la procédure choisie
case else
end select

' ceci ne marche bien que si ton programme est déclenché uniquement par ton
prog 2 et se referme ensuite..
sinon éffectivement les autres réponses (que je ne maitrise pas du tout)
semblent bonnes (je ne juge pas).

Driss

"Patrick EVEN" a écrit dans le message de news:
%
> Bonjour,
>
> J'aimerais savoir comment exécuter du code VB6 (une Sub par exemple)
> écrit dans un module du Projet1 sans formulaire,
> à partir d'un click sur le bouton d'un formulaire du Projet2.
>
> Remarque :
>
> Pour les tests de faisabilité, Projet2 est en VB6,
> mais à terme, je ce sera plutôt du Java ou du C++.
>
> Merci d'avance pour vos suggestions.
>
> Cordialement,
> Patrick EVEN
>
>





Avatar
driss hanib
tout à fait FreGoLi ,

tout dépend la nature des actions demandées..
Patrick devrait préciser la nature des action souhaitées pour vancer plus
concrètement

Driss
"[___FreGoLi___]" a écrit dans le
message de news:
Salut;

Cette solution marchera si l'appel peut être asynchrone, c'est à dire si
l'appelant n'a pas besoin d'attendre la fin de l'exécution de la sub pour
continuer. Sinon, il faudrait dans l'appelant, attendre la fin de
l'exécution.

De plus il reste le passage de paramètres éventuels.

Je ne pense pas qu'il s'en sorte autrement qu'avec une DLL classique.


"Driss HANIB" a écrit :

bonjour Patrick,

une solution qui vaut ce qu'elle vaut..
Il faudrait que dans ton projet 1, tu puisses gérer les paramètres avec
la
fonction 'Command$'
Tu compiles et dans ton projet 2 tu 'lances le programme1 avec les
paramètres choisis.

Exemple

Dans ton Projet2 tu peux écrire

Ret = Shell ("Programme1.exe /Choix1")
à vérifier la syntaxe.

Dans ton projet1 tu mets dans ta procédure de départ
select case Command$ 'si tu n'as qu'un parmètre à la fois
case "/Choix1"
' déclenchement de la procédure choisie
case else
end select

' ceci ne marche bien que si ton programme est déclenché uniquement par
ton
prog 2 et se referme ensuite..
sinon éffectivement les autres réponses (que je ne maitrise pas du tout)
semblent bonnes (je ne juge pas).

Driss

"Patrick EVEN" a écrit dans le message de news:
%
> Bonjour,
>
> J'aimerais savoir comment exécuter du code VB6 (une Sub par exemple)
> écrit dans un module du Projet1 sans formulaire,
> à partir d'un click sur le bouton d'un formulaire du Projet2.
>
> Remarque :
>
> Pour les tests de faisabilité, Projet2 est en VB6,
> mais à terme, je ce sera plutôt du Java ou du C++.
>
> Merci d'avance pour vos suggestions.
>
> Cordialement,
> Patrick EVEN
>
>







Avatar
Patrick EVEN
Pour l'instant, j'ai adopté la solution suivante :
- Sur l'événement click d'un bouton d'un formulaire du Projet2,
j'ai codé une instruction Shell du genre :
Id = SHELL("C:MyDirProjet1.exe" & Me.MyArg, vbNormalNoFocus)

- Dans Projet1, j'ai créé un formulaire vide
dont l'événement Load contient :
Me.Hide
Call MySub(Command$)
Unload Me

- Toujours dans Projet1, j'ai inséré un module MyMod
pour y introduire le code de MySub.
MySub se charge :
- de lancer un autre programme écrit en Java ou C++
- de simuler avec des SendKeys ce que ferait un opérateur
pour arriver sur l'écran relatif aux données de MyArg.

Tout cela marche parfaitement sur mon poste de développement.
Mais quand je tente de reproduire cela sur un poste ou VB6 n'est pas
installé,
j'obtient une erreur 53 (Fichier introuvable) sans plus de précision.

L'installation du Runtime VB6 n'y a rien changé.
L'utilisation de l'assistant d'empaquetage non plus
(mais les options sont nombreuses, et j'ai peut être raté une marche !).

Cordialement,
Patrick EVEN

"driss hanib" a écrit dans le message de news:

tout à fait FreGoLi ,

tout dépend la nature des actions demandées..
Patrick devrait préciser la nature des action souhaitées pour vancer plus
concrètement

Driss
"[___FreGoLi___]" a écrit dans le
message de news:
Salut;

Cette solution marchera si l'appel peut être asynchrone, c'est à dire si
l'appelant n'a pas besoin d'attendre la fin de l'exécution de la sub pour
continuer. Sinon, il faudrait dans l'appelant, attendre la fin de
l'exécution.

De plus il reste le passage de paramètres éventuels.

Je ne pense pas qu'il s'en sorte autrement qu'avec une DLL classique.


"Driss HANIB" a écrit :

bonjour Patrick,

une solution qui vaut ce qu'elle vaut..
Il faudrait que dans ton projet 1, tu puisses gérer les paramètres avec
la
fonction 'Command$'
Tu compiles et dans ton projet 2 tu 'lances le programme1 avec les
paramètres choisis.

Exemple

Dans ton Projet2 tu peux écrire

Ret = Shell ("Programme1.exe /Choix1")
à vérifier la syntaxe.

Dans ton projet1 tu mets dans ta procédure de départ
select case Command$ 'si tu n'as qu'un parmètre à la fois
case "/Choix1"
' déclenchement de la procédure choisie
case else
end select

' ceci ne marche bien que si ton programme est déclenché uniquement par
ton
prog 2 et se referme ensuite..
sinon éffectivement les autres réponses (que je ne maitrise pas du tout)
semblent bonnes (je ne juge pas).

Driss

"Patrick EVEN" a écrit dans le message de news:
%
> Bonjour,
>
> J'aimerais savoir comment exécuter du code VB6 (une Sub par exemple)
> écrit dans un module du Projet1 sans formulaire,
> à partir d'un click sur le bouton d'un formulaire du Projet2.
>
> Remarque :
>
> Pour les tests de faisabilité, Projet2 est en VB6,
> mais à terme, je ce sera plutôt du Java ou du C++.
>
> Merci d'avance pour vos suggestions.
>
> Cordialement,
> Patrick EVEN
>
>