Dde: dynamic data exchange

Soyez le premier à donner votre avis sur cette source.

Vue 11 189 fois - Téléchargée 551 fois

Description

Voila une petite classe permettant de mettre en oeuvre une liaison Client vers un serveur DDE. Ce n'est qu'une adaptation d'un code que j'ai trouvé dans les aides, mais vu que j'ai galèré pour la mettre en application, je trouve judicieux de la diffuser...

Pour la classe, j'avoue qu'il y a peut-etre mieux, mais bon elle a le merite d'etre claire, et concise... Pour les fouineurs, je n'ai pas reflechi pour la création d'un Serveur DDE, mais pour les courageux le travail reste à faire....

Source / Exemple :


juste un exemple de code avec le serveur DDE de EXCEL.... 

/********************************************************/
/*                            Verifie que Excel est installé                           */
/********************************************************/
static bool ExcelRegistry(char *Valeur)
  {
  CRegistreUtil Registre;

  if(!Registre.LitTexte(HKEY_CLASSES_ROOT,EXCEL_KEY,"",Valeur,100))
    return TRUE;
  return FALSE;
  }

/********************************************************/
/*                            Envoi l'instruction DDE a excel                         */
/********************************************************/
static bool ExcelDDE(char *Commande)
  {
  DDE  ddeSysteme;	

  if(ddeSysteme.OuvrirConnexion("Excel","System"))
    {
    ddeSysteme.EnvoiChaine(Commande);
    ddeSysteme.FermeConnexion();
    return TRUE;
    }
  return FALSE;
  }

/********************************************************/
/*                       Ouvre le fichier et l'envoi vers excel                      */
/********************************************************/
void COscilloUSBDlg::OnMenuEporterversexcel() 
{
CString	Sortie;
char Commande[500];
char Valeur[200];
CFileDialog dlg(false,"xls","*.xls");

  if(dlg.DoModal()==IDOK)
    {
    Sortie=dlg.GetPathName();

    if(ExcelRegistry(Valeur))
      {
      wsprintf(Commande,"[OPEN(\"%s\")]",Sortie.GetBuffer(Sortie.GetLength()));
      WinExec(Valeur,SW_SHOWDEFAULT);   // Lance Escel
      ExcelDDE(Commande);                      // Envoi l'instruction DDE
      }		
    }
  }

Conclusion :


Bien sur ce n'est qu'un exemple, moi je l'utilise pour créer un fichier et l'envoyer directement vers un logiciel d'analyse (REGRESSI)... Certains logiciels courants utilisent des liasons client-serveur de type OLE ou DDE. (WORD-EXCEL-ACCESS etc ...)

A vous de jouer....

NB :
Merci à MangaII pour sa classe d'acces à la base de registre (CRegistreUtil) .Il est bien ce petit gars...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

BarthOlivier
Messages postés
132
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2012
1
Bonjour

C'est une bonne question. A choisir,si tu maitrises les deux applications, je partirais plutôt sur une structure TCP ou UDP pour des endroit critique. Ceci dit, que défini tu pas "endroits critiques".

Maintenant je programme a l'instinct / barbare, n'utilisant que très rarement ce genre de procédés. Je vais surement me faire tapper sur les doigts par les vrais informaticiens du site. (je ne suis qu'un électronicien un peu évolue <smiley> )

Sinon un serveur OLE est peut-etre plus pratique qu'un DDE je crois. Moi je n'avais pas le choix, donc je me suis pas posé la question. Tu as de nombreuses informations sur ce site qui pourront compléter tes questions.

Sinon si c'est juste pour dire à tel ou tel appli que tel ou tel événement est passé. préfère peut-être les Message Windows.

Toujours est il que l'on reste tributaire d'un OS non Temps réel.tout juste du temps partagé sans garantie de bande. Même en mettant la priorité très Hautes sur tes softs tu sera toujours coincé.

J'espere que tu trouveras une solution a ton problème

MisterMok
shuttleur
Messages postés
33
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
30 juin 2008

Salut BarthOlivier

Je viens de découvrir cette fonctionnalité de Windows, est ce qu'à ton avis il est sage de l'utiliser à des endroits critiques des applications qui conversent ?

Est ce qu'il y a un risque sérieux que le dialogue soit corrompu par d'autres applis, les messages soient perdus, retardés, etc ?

Merci d'avance.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.