#1 Thu 26 April 2007 09:04
- didier.bondyfalat
- Participant occasionnel
- Lieu: Nice
- Date d'inscription: 31 Jan 2007
- Messages: 31
Echange de variables entre MapBasic et MapInfo
Bonjour,
Mon but est d'initialiser deux variables à partir d'un fichier.
Pour faire cette manip, j'ai écrit un programme en MapBasic "toto.mbx" qui possède deux variables globales.
Au démarrage de MapInfo, j'exécute mon programme toto.mbx qui fonctionne à merveille.
Mais comment fait-on pour récuper les fameuses variables globales du mbx dans MapInfo ? ou bien dans un autre mbx ?
Merci pour vos lumières.
Didier.
Hors ligne
#2 Thu 26 April 2007 11:14
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: Echange de variables entre MapBasic et MapInfo
Bonne question car en effet via la FMB on ne peut pas utiliser les variables (globales ou pas) d'un MBX...
Il faudrait tester de lancer deux MBX avec des variables qui ont le meme nom et voir ce qu'il se passe...
A priori je pense que les zones mémoires sont complétement indépendantes et peut être imperméables entre des MBX et MI, mais je me trompe peut-être (je l'espère même !).
Hors ligne
#3 Thu 26 April 2007 11:25
- didier.bondyfalat
- Participant occasionnel
- Lieu: Nice
- Date d'inscription: 31 Jan 2007
- Messages: 31
Re: Echange de variables entre MapBasic et MapInfo
Les zones mémoires sont complètements indépendantes puisqu'il existe une technique d'échange de variable à partir des instructions DDE du mbx vers mapinfo depuis mapinfo.
Cependant cette technique fonctionne que si le mbx est encore actif. Dans mon cas, le mbx s'exécute et meurt desuite.
Didier.
Hors ligne
#4 Thu 26 April 2007 14:31
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: Echange de variables entre MapBasic et MapInfo
Avez vous un End Program dans votre mbx qui signale la fin de l'éxécution du code ?
Si c'est le cas il suffirait d'ajouter un bouton dans une barre ou un menu deroulant qui fasse appel à une Sub EndHandler (qui gère la fin de l'éxecution d'un MBX) dans laquelle vous aurez appelé la fonction End Program, ce qui permettrait de garder les variables en mémoire jusqu'à ce moment là...
Dernière modification par Cartosig (Thu 26 April 2007 14:34)
Hors ligne
#5 Thu 26 April 2007 21:37
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Echange de variables entre MapBasic et MapInfo
Bonjour,
A mon humble avis la première impression de Cartosig est la bonne:
- on ne peut pas passer de variable entre MB et MI
- les variables globales ne peuvent permettre le passage qu'entre modules d'un projet MB, pas entre deux mbx
Mais je ne demande qu'à être contredit !!
Hors ligne
#6 Fri 27 April 2007 00:19
- Damien BEAUSEIGNEUR
- Participant assidu
- Lieu: meyzieu
- Date d'inscription: 5 Sep 2005
- Messages: 425
Re: Echange de variables entre MapBasic et MapInfo
Bonjour
En solution de contournement
IL faudrait prévoir l'écriture d'un fichier contenant les variables globales à récupérer.
Comme çà les différents programmes devrait pouvoir échanger des informations sans passer par des variables inaccessibles.
Hors ligne
#7 Fri 27 April 2007 09:09
- Gérard parcoli
- Participant actif
- Date d'inscription: 9 Jan 2007
- Messages: 95
Re: Echange de variables entre MapBasic et MapInfo
Bonjour
pour le transfert des variable de l'application MB vers mapinfo, vous pouvez également utiliser une astuce avec des 'Run Command' :
Dim Variable1 as string 'définition de la variable dans MB
Run command "Dim Variable1 as string" 'définition de la variable dans MI, équivalent à la même commande saisie dans la FMB
Variable1 = "montexte" ' affectation d'une valeur à la variable dans MB
Run command "Variable1 = """ + Variable1 +"""" 'affectation d'une valeur à la variable dans Mi, équivalent à la même commande saisie dans la FMB
Dans Mapinfo il devient ensuite possible d'utiliser Variable1 dans les expressions/fonctions.
Mais attention, Mapinfo ne saura pas gérer deux <Run command "Dim Variable1 as string"> dans une même session (lancement de deux applications faisant la même définition de variable dans mi, ou tout simplement lancer deux fois le meme MB). Il faut tenter de jouer avec la commande Undim dans ce cas (Run command "unDim Variable1")... un plantage du MBX peut ainsi nécessiter le redémarrage de MI si on sait pas quelles variables undimer (ou s'il y en a beaucoup).
Pour interroger depuis mb la valeur de cette variable mi, on peut passer par DDE. Dans MB :
Dim i_chan_num As Integer, s_Valeur1 As String
i_chan_num = DDEInitiate("MapInfo","system")
s_Valeur1 = DDERequest$(i_chan_num, "variable1")
Gerard
Hors ligne
#8 Fri 27 April 2007 10:19
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: Echange de variables entre MapBasic et MapInfo
Evidemment il suffisait d'y penser ! Bien vu Gérard !
Hors ligne
#9 Fri 04 May 2007 14:32
- didier.bondyfalat
- Participant occasionnel
- Lieu: Nice
- Date d'inscription: 31 Jan 2007
- Messages: 31
Re: Echange de variables entre MapBasic et MapInfo
Ok, merci de vos réponses.
J'ajouterai tout de même la possibilité de passer par des variables d'environnement grâce aux fonctions GetEnvironmentVariable et SetEnvironmentVariable de la librairie kernel32. Elles permettent de définir des variables dans l'environnement windows et visible uniquement dans le procecus de MapInfo (pas trop de polution).
Didier.
Hors ligne