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

DDE serveur

25 réponses
Avatar
David MAREC
Salut les gens !

J'essaye d'écrire un serveur DDE en C++, mais sans les MFC,
plus précisément à l'aide de la STL.
Les exemples que j'ai trouvé jusqu'à présent sont :

1- Une source "C" fournie par la MSDN, dont je n'arrive pas à me
dépatouiller. C'est un peu le souk dans l'exemple fourni.

2- Une source «C++/MFC» que je n'arrive pas à traduire.(je ne maitrise pas
du tout les MFC).En fait, si, un peu mais ça finit par m'exploser dans les
mains à la deuxième tentative de connexion.

Est ce qu'une bonne âme aurait une classe de ce type sous la main, une aide ?

10 réponses

1 2 3
Avatar
Thierry
Bonjour,

David MAREC a écrit :

Salut les gens !

J'essaye d'écrire un serveur DDE en C++, mais sans les MFC,
plus précisément à l'aide de la STL.



Qu'est ce que t'appelle DDE ??? COM ?
Si oui, ATL s'impose.

--
« Always look at the bright side of the life... »
Avatar
David MAREC
D'après Thierry :

J'essaye d'écrire un serveur DDE en C++, mais sans les MFC,
plus précisément à l'aide de la STL.



Qu'est ce que t'appelle DDE ??? COM ?



Non, un serveur DDE. Un truc qui date un peu.

Si oui, ATL s'impose.



Euh, j'espère bien que non.

J'ai ré-écris la classe à l'aide des STL ceci dit.

Les opérations de connexion fonctionnent, mais pas la lecture de données.

Le client (EXCEL) répond "#Nom".
Quel est le problème ?
- c'est mieux que le "#N/A" d'hier, quand même. -
Avatar
Patrick Philippot
David MAREC wrote:
J'essaye d'écrire un serveur DDE en C++, mais sans les MFC,
plus précisément à l'aide de la STL.



Bonjour,

Je ne comprends pas. Vous n'utilisez pas DDEML? Ou vous cherchez à
encapsuler DDEML?

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
David MAREC
D'après Patrick Philippot :

Je ne comprends pas. Vous n'utilisez pas DDEML? Ou vous cherchez à
encapsuler DDEML?



Sisi, j'utilise <ddeml.h>

J'ai écrit une classe serveur (aidé par celle écrite sur la base de MFC
que j'ai trouvé) qui encapsule des objets "Topics".


Mais, si j'arrive désormais à lire du Texte, il me reste à comprendre
pas mal de mécanismes, notamment comment lire autre chose que du texte,
et comment avertir le client lorsqu'une donnée a changé !?

Aussi, je cherche une vrai méthode propre pour passer de
std::string à HSZ et de std::string à LPBYTE.

Bref, j'avance à très petits pas, pour réinventer la roue, il me semble.
Avatar
Arnaud Debaene
David MAREC wrote:
Salut les gens !

J'essaye d'écrire un serveur DDE en C++, mais sans les MFC,
plus précisément à l'aide de la STL.
Les exemples que j'ai trouvé jusqu'à présent sont :

1- Une source "C" fournie par la MSDN, dont je n'arrive pas à me
dépatouiller. C'est un peu le souk dans l'exemple fourni.

2- Une source «C++/MFC» que je n'arrive pas à traduire.(je ne
maitrise pas du tout les MFC).En fait, si, un peu mais ça finit par
m'exploser dans les mains à la deuxième tentative de connexion.

Est ce qu'une bonne âme aurait une classe de ce type sous la main,
une aide ?



Par pure curiosité, pourquoi est-ce que tu veux programmer un truc pareil
aujourd'hui? DDE n'est plus utilisé pour les nouvelles applis depuis 10 ans!

Arnaud
Avatar
Patrick Philippot
David MAREC wrote:
Mais, si j'arrive désormais à lire du Texte, il me reste à comprendre
pas mal de mécanismes, notamment comment lire autre chose que du
texte,



Le handle créé par DdeCreateDataHandle peut pointer vers n'importe quoi.

et comment avertir le client lorsqu'une donnée a changé !?



DdePostAdvise

Ceci étant, Arnaud a raison. Aujourd'hui, il n'y a aucune bonne raison
(j'allais dire excuse :-)) ) de programmer un serveur DDE alors que l'on
peut faire beaucoup mieux et plus facilement avec un serveur Automation
(COM). Surtout en MFC, c'est immédiat. Côté client je ne dis pas,
parfois le serveur ne sait faire que du DDE. Mais côté serveur, à moins
d'un cahier des charges particulièrement poussiéreux, je ne vois pas.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
David MAREC
Arnaud Debaene wrote:

Par pure curiosité, pourquoi est-ce que tu veux programmer un truc pareil
aujourd'hui? DDE n'est plus utilisé pour les nouvelles applis depuis 10 ans!



Parce que je dois me connecter à un client qui ne supporte que le DDE et
un format propriétaire pour lui fournir les informations d'un appareil
qui me les communique dans un autre format propriétaire.
Avatar
David MAREC
D'après Patrick Philippot :

Le handle créé par DdeCreateDataHandle peut pointer vers n'importe quoi.



Certes, mais comment gérer le format dans ce cas ?
Si je ne précise pas CF_TEXT, rien ne bouge.

DdePostAdvise



Bon, j'ai du le foirer, ça ne fonctionne pas.


--
Bouhouhou.J'en ai marre.
Avatar
Patrick Philippot
David MAREC wrote:
Le handle créé par DdeCreateDataHandle peut pointer vers n'importe
quoi.


Certes, mais comment gérer le format dans ce cas ?
Si je ne précise pas CF_TEXT, rien ne bouge.



Ce qui veut dire? Avez vous regardé ce que retourne DdeGetLastError ?
Nous ne pouvons pas répondre avec si peu d'informations.

DdePostAdvise


Bon, j'ai du le foirer, ça ne fonctionne pas.



Idem. "Ça ne fonctionne pas" n'est pas la description précise d'un
problème :-)) . Il faudrait essayer de faire un état plus précis de
l'appli quand vous considérez que ça a planté ou que le résultat n'est
pas conforme à vos attentes.

Comme ce protocole est assez tordu (c'est le moins que l'on puisse dire)
je vous conseille de tester votre echange DDE dans 2 sessions
différentes de VC++: une qui tourne le serveur et l'autre le client.
Avec des breakpoints judicieux, vous verrez déjà si les notifications
arrivent ou pas et ce qu'elles contiennent.

Bon courage.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
David MAREC
D'après Patrick Philippot:

Certes, mais comment gérer le format dans ce cas ?
Si je ne précise pas CF_TEXT, rien ne bouge.



Ce qui veut dire? Avez vous regardé ce que retourne DdeGetLastError ?
Nous ne pouvons pas répondre avec si peu d'informations.



- Je décris tout ce qui suit de mémoire. -

Si je ne force pas le format lors du DDECreateDataHandle(), le client DDE
n'arrive pas apparemment à comprendre le contenu de ce que je lui renvois.
(Excel m'affiche #NOM?)
D'où ma question sur la gestion types en DDE.

Je n'ai pas trouvé la moindre Doc, le moindre Tutorial, juste des exemples
de code, la doc éparses des fonctions à utiliser et une courte introduction
sur le site de Microsoft.
Ceci reste incompréhensible sans les spécifications du protocole.

Donc, si j'avance, je bute à chaque pas.
Et à ce rythme, j'aurai écrit ma classe vers la fin septembre.

DdePostAdvise


Bon, j'ai du le foirer, ça ne fonctionne pas.



Idem. "Ça ne fonctionne pas" n'est pas la description précise d'un
problème :-)) . Il faudrait essayer de faire un état plus précis de
l'appli quand vous considérez que ça a planté ou que le résultat n'est
pas conforme à vos attentes.



Si je renvoie bien la valeur, (je passe par le message idoine dans le
callback), le client ne voit rien.

Comme ce protocole est assez tordu (c'est le moins que l'on puisse dire)



Oui, hein.

Bon courage.



J'ai abandonné, faute de temps.
Je ne peux pas me permettre de passer des semaines là dessus, alors que j'ai
construit tout le protocole de communication Ethernet de l'appareil avec
qui le serveur devrait causer en trois jours.

J'ai donc pompé la source «C pur» et je l'adapte à ma classe de
communication.
C'est goret, mais je n'ai plus le choix.
Tant pis pour la classe DDEServer. Je suis tout de même étonné que je sois
le seul à avoir cherché à le faire.
1 2 3