IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

utilisation de fonctions de bases dans un ActiveX dll sous visual Basic 6


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 47
    Points : 36
    Points
    36
    Par défaut utilisation de fonctions de bases dans un ActiveX dll sous visual Basic 6
    Bonjour,

    je dois contrôler le logiciel MetaMorph, qui est un logiciel d'imagerie et de contrôle de microscope de laboratoire. Il est théoriquement possible d'utiliser Visual Basic 6 pour écrire des programmes qui peuvent appeler les différentes fonctions (ou commandes) du logiciel MetaMorph.

    Dans la documentation de MetaMorph, il est écris que ces programmes doivent être écris dans des ActiveX Dll (on écrit le programme, on créé le dll correspondant, et on peut charger ce dll dans MetaMorph pour lancer le programme).

    j'ai suivie ce que disait cette documentation, et j'ai rapidement réussi à utiliser les fonctions de MetaMorph (commande d'une caméra numérique installée sur microscope, contrôle de shutter sur lumière fluorescente,...). Je souhaiterais cependant utiliser également des fonctions "de base" telles que des fonctions sleep() ou wait(), ou encore des fonctions plus complexes qui me permettrait de lire et d'écrire dans des fichiers textes...

    Je ne connaît pas le langage VB, je suis plus familier avec des langages comme Java,python, Caml. Dans ces langages, il est possible d'importer des classes ou des scripts ou encore des modules, ... bref il est possible d'avoir facilement accès a une très large gamme de fonctions déjà programmées et surtout bien documenté.

    En est il de même pour les activeX dll de VB6?
    Si cela n'était pas possible, je sais qu'il est également possible de contrôler MetaMorph en utilisant Visual Studio.NET, pensez vous que ce logiciel/langage serait plus adapté?

    Merci pour vos précieuses réponses,
    Rémy A.

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,,
    Je ne comprends pas bien la démarche de ta question - tu écris ...
    Citation Envoyé par remya Voir le message
    Bonjour,

    je dois contrôler le logiciel MetaMorph, qui est un logiciel d'imagerie et de contrôle de microscope de laboratoire. Il est théoriquement possible d'utiliser Visual Basic 6 pour écrire des programmes qui peuvent appeler les différentes fonctions (ou commandes) du logiciel MetaMorph.


    Dans la documentation de MetaMorph, il est écris que ces programmes doivent être écris dans des ActiveX Dll (on écrit le programme, on créé le dll correspondant, et on peut charger ce dll dans MetaMorph pour lancer le programme).


    j'ai suivie ce que disait cette documentation, et j'ai rapidement réussi à utiliser les fonctions de MetaMorph
    (commande d'une caméra numérique installée sur microscope, contrôle de shutter sur lumière fluorescente,...). .../...
    Ce qui sous entend que tu as pu écrire une partie du code avec VB
    et d'autre part tu t'interroges sur les capacités du langage à réaliser ton objectif !
    Citation Envoyé par remya Voir le message
    .../...
    Je souhaiterais cependant utiliser également des fonctions "de base" telles que des fonctions sleep() ou wait(), ou encore des fonctions plus complexes qui me permettrait de lire et d'écrire dans des fichiers textes...

    Je ne connaît pas le langage VB, je suis plus familier avec des langages comme Java,python, Caml. Dans ces langages, il est possible d'importer des classes ou des scripts ou encore des modules, ... bref il est possible d'avoir facilement accès a une très large gamme de fonctions déjà programmées et surtout bien documenté.


    En est il de même pour les activeX dll de VB6?

    .../...
    La doc recherchée concerne VB6 ou les librairies COM ?
    Pour VB6, il y a la MSDN (téléchargeable sur ce sites dans les outils)
    pour les librairies, ça dépendra des librairies, mais étant donné que l'intellisense et l'exposition des méthodes est disponible,
    ça ne pose en général pas de problème notable même sans doc.
    Ceci dit, si tu développes dans d'autres langage, tu dois savoir par exemple que Sleep s'obtient très facilement via le Sleep de Kernel32.
    Citation Envoyé par remya Voir le message
    .../...
    Si cela n'était pas possible,
    .../...
    Il n'y a (quasiment) rien qu'il ne m'a été possible de réaliser sous VB6
    Citation Envoyé par remya Voir le message
    .../...je sais qu'il est également possible de contrôler MetaMorph en utilisant Visual Studio.NET, pensez vous que ce logiciel/langage serait plus adapté?

    Merci pour vos précieuses réponses,

    Rémy A.
    L'endroit est mal choisi pour répondre, les adeptes de VB6 étant ceux qui ont refusé de passer à VB.net du fait que la facilité de prise en main du langage y est moins aisée.
    Poses ta question sur le forum Dot.net, on t'y répondra à coup sur que oui.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 47
    Points : 36
    Points
    36
    Par défaut
    Bonjour,
    merci pour ta réponse,

    Ce qui sous entend que tu as pu écrire une partie du code avec VB
    et d'autre part tu t'interroges sur les capacités du langage à réaliser ton objectif !
    en effet j'ai pu écrire du code, d'ailleurs le voici:

    1/ Une classe que je qualifierait de "classe mère"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Option Explicit
     
    Public gUserID As Long
    Public gParentWnd As Long
    Public MM As MMAppLib.UserCall
     
    Public Function Startup(cmdLine As String) As Long
        DoCommand cmdLine
    End Function
     
    Public Function DoCommand(cmdLine As String) As Long
        Set MM2 = MM
        PictureRoutine
    End Function
     
    Public Function Shutdown() As Long
     
    End Function
    Elle charge 3 objets propres à MetaMorph, et 3 méthodes sont crées: Startup, DoCommand et Shutdown.
    quand le dll est chargé par MétaMorph, la fonction Startup est exécuté. La fonction shutdown est exécuté lorsque le programme à fini de compiler.
    et la fonction DoCommand... On aurait pu s'en passer je l'admet, mais c'était écris comme ça dans le tutoriel MetaMorph...

    Le point important à noter est que dans l'objet MM se trouve toutes les commandes propres à MetaMorph (par exemple MM.CloseImage () fermera la dernière image selectionnée dans MetaMorph, ou encore MM.RunJournal(path As String) permet d'exécuter une macro (on appelle cela un journal dans MetaMorph) enregistré selon le chemin "path" )

    2/A coté de cela, j'ai créé un module pour mettre mes fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Explicit
     
    Public MM2 As MMAppLib.UserCall
     
    'picture taker's journal
    Public pathPictureTaker As String
    'shutter actuator's journal
    Public pathOpenShutter As String
    Public pathCloseShutter As String
     
    Sub Main()
        pathPictureTaker = "D:/Abergel Remy/Metamorph Files/takePictureWithoutActuatingShutter.jnl"
        pathOpenShutter = "D:/Abergel Remy/Metamorph Files/openShutter.jnl"
        pathCloseShutter = "D:/Abergel Remy/Metamorph Files/closeShutter.jnl"
    End Sub
     
     
    Public Function PictureRoutine()
        MM2.RunJournal pathOpenShutter
        MM2.RunJournal pathPictureTaker
        MM2.RunJournal pathCloseShutter
    End Function
    MM2 est une copie de MM (c'est le seul moyen que j'ai trouvé pour avoir accès à l'objet en dehors de la classe mère)
    pathPictureTaker, pathOpenShutter et pathCloseShutter sont des Strings qui sont initialisées dans la fonction Main de la classe mère, ces variables contiennent des chemins où sont sauvés des Macros (journaux) MetaMorph sur mon disque dur.

    Et enfin la methode PictureRoutine(), qui est exécuté dans la méthode DoCommand de la classe mère. Elle est sensé ouvrir le shutter du dispositif de lumière fluorescente installé sur le microscope, faire prendre une photo à la caméra également installée sur le microscope, et fermer le shutter. Pour l'instant c'est très basique mais je compte bien sur écrire des programmes plus complexes (en particulier lire et écrire des datas dans un fichier texte, contrôler un port série...)

    Quoi qu'il en soit, comme vous pouvez le voir, je ne me sert pour le moment que des méthodes de l'objet MM2, je n'arrive pas a utiliser des fonctions de base comme un sleep que j'aimerai mettre ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function PictureRoutine()
        MM2.RunJournal pathOpenShutter
        sleep(2000)
        MM2.RunJournal pathPictureTaker
        MM2.RunJournal pathCloseShutter
    End Function
    ma question est de savoir:
    1/si il était possible d'avoir accès à de tels fonctions "usuelles" et "pré-programmées" dans un activeX dll.
    2/Si oui, en utilisant la doc MSDN (pour le moment, j'ai des problèmes pour l'installer, je n'y ai donc pas encore accès ) est il possible de trouver facilement les infos nécessaire à l'utilisation de tels fonctions? (dans le cas de java, les "javadoc" permettent en un clin d'oeil de comprendre comment utiliser les methodes d'une classe).


    Mon problème étant reformulé de manière plus clair (il me semble) je vais maintenant essayer répondre aux questions que tu m'as posé.

    La doc recherchée concerne VB6 ou les librairies COM ?
    ça commence mal >< désolé je ne connais pas VB je ne sais pas ce que c'est qu'un objet ou une librairie COM...

    Ceci dit, si tu développes dans d'autres langage, tu dois savoir par exemple que Sleep s'obtient très facilement via le Sleep de Kernel32.
    je n'ai jamais utilisé cela, je ne sais même pas ce que c'est pour tout te dire En tout cas Java et Python sont des langages portables (plus java que python quand même) ils sont donc sensé ne pas utiliser de fichiers systems du système d'exploitation. Quand je veux utiliser une fonction "sleep" j'importe le module ou la classe nécessaire, tout simplement...


    pour les librairies, ça dépendra des librairies, mais étant donné que l'intellisense et l'exposition des méthodes est disponible ,ça ne pose en général pas de problème notable même sans doc.
    Il me semble que c'est cela que je cherche à utiliser: comment puis-je inclure ces librairies dans mon code ActiveX dll? Où ces librairies sont elles téléchargeable?


    Merci beaucoup pour ton aide.
    Rémy.

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    J'ai lu à vitesse grand V (autant dire en diagonale) - vais pas y passer la journée non plus

    1°) va à http://vb.developpez.com/outils/ et installe MSDN
    2°) pour l'accès aux apis, même chemin (http://vb.developpez.com/outils/) et télécharge Api-guide, voit Sleep, c'est parlant
    3°) librairie COM = activeX lol
    pour y accéder, dans l'ide Alt PR, mais tu as du le voir puisque tu utilises
    MM As MMAppLib.UserCall dans ton code

    4°) Globalement sur ton code
    a) évite les variables publiques dans les modules de classe utilise property get/let/set
    b) pour la propagation de la classe utilise l'évènement Initialize de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Class_Initialize()
        set MM = New MMAppLib.UserCall 
        set ClsMM=me
    End Sub
    et place Public clsMM qui fait référence à ta classe dans un module standart.
    Tu pourras ainsi utiliser l'instance en cours en dehors de ta classe avec clsMM.... .
    c) Public (Private/Dim) MM As MMAppLib.UserCall ne crée pas l'object, il en déclare seulement le type
    => set MM = New MMAppLib.UserCall crée l'object

    5)° attention, sous VB6 set MM2=MM ne clone pas l'object mais copie seulement son pointeur.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 47
    Points : 36
    Points
    36
    Par défaut
    Merci beaucoup,
    l'apiGuide est exactement ce qu'il me manquait !

    Pour ceux qui comme moi ne connaissent rien a VB mais qui sont amenés à l'utiliser :
    J'ai trouvé la documentation de la fonction sleep dans l'apiGuide (sorte de documentation des librairies si je ne m'abuse) et j'ai recopié dans mon code cette ligne qui était écrite dans un exemple de code appelant la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    ce qui a été équivalent à une syntaxe java de type

    Merci également pour ton code, effectivement ce n'est pas beau du tout ces déclarations "public", je vais tenter de réécrire ça de manière plus propre.

    merci merci merci
    Rémy.

  6. #6
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Pour compléter, vérifies dans le menu Outils/Options de l'ide (Alt OO)
    onglet Editeur que toutes les options sont checkées afin de bénéficier
    entr'autre de l'intellisense - tu constateras alors que la programmation sous VB est très intuitive.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2010, 17h19
  2. Comment utiliser la fonction intégrée CMonnaie dans un module
    Par lynepicard dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/08/2007, 16h54
  3. Réponses: 8
    Dernier message: 07/05/2006, 18h35
  4. Réponses: 15
    Dernier message: 13/04/2006, 13h32
  5. Réponses: 11
    Dernier message: 22/12/2003, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo