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

Langages Discussion :

Partage de variables entre plusieurs projets via une DLL


Sujet :

Langages

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Partage de variables entre plusieurs projets via une DLL
    Bonjour,
    Je cherche à partager des variables via une DLL par 2 applications distinctes (une application Windows Form et MetaTrader 4).
    Pour cela j'ai développé une petite DLL C# contenant une variable static de type int et 2 fonctions "AddInteger" et "GetInteger" (fichier de sortie : MyDLL.dll).
    Dans un projet Windows Form en C#, dans lequel j'ai ajouté la référence à cette DLL, j'ai mis un bouton qui permet d'ajouter 500 à la variable static à chaque clic dessus et un TextBox qui affiche la valeur de la variable static toute les secondes via un Timer (fichier de sortie : MyWindowsFormTestDLL.exe).
    Ces 2 fichiers de sorties sont mis dans le dossier LIBRARIES de MetaTrader 4 pour que la DLL puisse être utilisée dans MetaTrader 4.

    Dans MetaTrader 4, j'ai programmé les fonctions de la DLL de manières à ce qu'un Expert Advisor ajoute 1 à chaque Tick dans la variable static et affiche ensuite la valeur dans le journal de MetaTrader.

    Je lance MetaTrader 4 : tout fonctionne correctement ; je vois l'affichage de la variable qui se voit ajouter 1 à chaque click
    Parallèlement je lance mon Windows Form et je clic sur le bouton : cela ajoute bien 500 à chaque fois.

    Mais les valeurs ajoutées par MetaTrader 4 n'arrive pas dans mon Windows Form et inversement !
    Tout se passe comme si il y avait 2 variables static l'une gérée par MetaTrader et l'autre gérée par mon Windows Form !

    Que faut-il que je fasse pour que les 2 programmes MetaTrader et mon Windows Form partage la même variable static ?
    A noter que c'est un domaine que je ne maitrise pas !
    J'ai cherché sur les forums pour tenter de trouver un problème similaire mais en vain.
    Y a t-il des exemples de code quelque part sur lequel je pourrais me baser pour avancer dans la résolution de mon problème ?
    Existe t-il des livres traitant de ces interactions entre programmes managés et non managés (DLLImport, DLLExport) en français ?

    Ci-dessous le code utilisé généré dans Visual Studio 2013 ainsi que les projets correspondant en pièces jointes :
    MyDLL.zipMyWindowsFormTestDLL.zip

    MyDLL.dll :
    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.InteropServices;
    using RGiesecke.DllExport;
     
    namespace MyDLL
    {
        public class MesFonctionsDLL
        {
            public static int MaVariableInt;
     
            [DllExport("AddInteger", CallingConvention = CallingConvention.StdCall)]
            public static int AddInteger(int value)
            {
                //Ajout de value à la variable static
                MaVariableInt += value;
                return (MaVariableInt);
            }
     
            [DllExport("GetInteger", CallingConvention = CallingConvention.StdCall)]
            public static int GetInteger()
            {
                return (MaVariableInt);
            }
        }
    }
    MyWindowsFormTestDLL.exe :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using MyDLL;
     
    namespace MyWindowsFormTestDLL
    {
        public partial class MyForm : Form
        {
            public MyForm()
            {
                InitializeComponent();
            }
     
            private void MyForm_Load(object sender, EventArgs e)
            {
                //Démarre le timer
                this.MyTimer.Start();
            }
     
            private void MyTimer_Tick(object sender, EventArgs e)
            {
                //Affiche la valeur de la variable static de la dll dans la TextBox
                this.MyTextBox.Text = MesFonctionsDLL.MaVariableInt.ToString();
            }
     
            private void MyButton_Click(object sender, EventArgs e)
            {
                //Ajoute 500 à la variable static de la dll
                MesFonctionsDLL.MaVariableInt += 500;
            }
        }
    }
    Merci d'avance pour vos réponses.

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour,
    La DLL "MyDLL" est chargée deux fois, par chaque application, dans des contextes d’exécutions différents et isolés.
    Pour échanger des informations entre deux applications vous devez regarder du côté des canaux nommés :
    exemple : http://cvoisin-dotnet.blogspot.fr/20...es-nommes.html

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour les informations.

    J'ai donc effectué des recherches de ce coté là.
    J'en suis arrivé à l'utilisation des services Windows via WCF.

    Et je suis arrivé à faire communiquer 2 applications Windows Form indépendantes, ainsi qu'une DLL à part, par le biais d'un service WCF en suivant les explications des vidéos du Guide du débutant pour Windows Communication Foundation.
    Mais impossible de faire communiquer ma DLL MT4 avec le service créé, et ceci malgré l'ajout des mêmes références utilisées dans les Windows Form et l'autre DLL ; J'obtiens le message d'erreur suivant :

    Nom : Message Erreur.PNG
Affichages : 773
Taille : 36,6 Ko

    Et je ne sais pas où chercher la réponse à ce problème.
    A mon avis il ne manque pas grand chose mais je ne sais pas quoi (de quel fichier le message d'erreur fait-il allusion ?)

    Pouvez-vous m'aider ?

    Avec mes remerciements.

  4. #4
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Si je comprends bien ,le problème vient de la config du client qui consomme le WCF.

    On a par exemple WinForm1 qui référence Dll1 et Dll1 qui contient les classe de proxy client WCF générées par Visual studio.
    Dans ce cas , deux possibilités :
    - Instancier les classes de proxy client du webservice WCF sans fichier de configuration (la configuration est en dur dans le code)
    - Ajouter la config du proxy dans le fichier de config WinForm1

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

Discussions similaires

  1. [Débutant] Partager des javascripts entre plusieurs projets d'une même solution
    Par antrax2013 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/12/2012, 10h59
  2. Référence entre plusieurs projets d'une même solution
    Par robertlafrite dans le forum Windows Forms
    Réponses: 9
    Dernier message: 04/07/2008, 09h56
  3. Partager des variables entre plusieurs actions ds un controlleur
    Par gvdmoort dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 11/10/2007, 09h38
  4. Liaison entre plusieurs projet d'une solution
    Par jeremycs dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/02/2007, 13h38
  5. Partage de variables entre plusieurs pages
    Par bud_gw dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/12/2005, 15h42

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