Newsgroup: it.comp.programmare.win32
Titolo: Consiglio su un libro su DDE e ApiWin32

Salve,
qualcuno ha da suggerirmi un buon libro che illustri la programmazione Win32
e che al suo interno parli anche (per più di 10 righe) della programmazione
con DDE????
Anche se .Net non supporta più DDE, molte applicazioni usano ancora questa
tecnologia nonostante ole ed altro...
Grazie mille,
Luca Landi

, 
luca....@inwind.it
 says...

L'immancabile Petzold dedica un intero capitolo al DDE, il 17, da pag 
737 a pag 788. Io pero' ho una vecchia edizione per Windows 3.1 (quella 
tradotta in italiano dalla Jackson libri). Rispondendo invece all'altro 
tuo post devo vedere se riesco a recuperare il floppy che c'era in 
allegato, ci sono degli esempi (sempre che sia ancora leggibile). Ho 
visto che su comp.compliers.lcc non ti hanno ancora risposto, ma prova a 
vedere se sul sito di John c'e' qualche esempio (non mi pare, ma tentare 
non nuoce).
Luca

Ciao,
ti ringrazio per la risposta. Si purtroppo non ho ancora avuto risposte
utili al mio problema con le DDE.
Non ho il Petzold e non penso che una edizione dedicata a Windows XP o
simili abbia ancora un capitolo simile.....Potrei provare al Libraccio,
magari un usato d'epoca lo trovo...
Se riesci a postarmi quanche esmpio (se li trovi) mi fai un gran piacere.
Attualmente in realtà sono riuscito a compilare con LCC due porgrammini di
esempio (un server ed un client) DDE che riescono a parlarsi, ma non riesco
a capire ancora come mai non mi funzionino alcune cose, come ad esempio la
ricerca dei possibili app-server DDE disponibili.
Il tutto dovrebbe essere fatto mediante la funzione DdeConnectionList() e la
DdeQueryConvInfo(), ma proprio quest'ultima non mi riempie il buffer
passatoglio con il nome dei servizi/server disponibili che dovrebbero essere
presenti in una struttura chiamata CONVINFO. La cosa incredibile è che non
mi da nessun errore!! Funge tutto, ma i buffer sono vuoti, ed il codice non
è mio, è un esempio microsoft del 1 ottobre del 1992 (un po' vecchio, ma il
suo pre-compilato funge ancora anche sotto Windows XP).
Grazie,
Luca Landi


 [...]
Il floppy l'ho cercato e trovato la sera stessa in cui avevo postato il
messaggio. Ho gia' gli esempi del capitolo 17 zippati sul desktop, solo che
li ho a casa, te li mando questa sera. Se poi ti occorrono informazioni
precise posso guardarle e riferirti, basta che non mi fai copiare pagine e
pagine :)
Luca

 [...]
Mi e' venuto in mente ora... Hai provato a guardae su Programmers Heaven
(
http://www.programmersheaven.com/
)? E' un sito talmente vecchio che di
sicuro trovi esempi sul DDE.
Luca

 ha scritto nel messaggio
news:b7ed8h$dhr$1...@galileo.it.ip-plus.net...


mi da nessun errore!!
   Cioe` ti restituisce un numero di byte copiati, e poi la struttura
CONVINFO non e` correttamente riempita? Oppure ti restituisce zero
(indice che c'e` stato un errore), ma DdeGetLastError() ti restituisce
DMLERR_NO_ERROR?
-- 
S.L.

 S.L.

che va tutto bene.
   Questo pezzetto di applicazione per console mi gira perfettamente
compilato con Borland C a linea di comando. Ho rimosso i controlli di
errore per non eccedere con le dimensioni del messaggio.
idInst = 0;
DdeInitialize(&idInst, NULL, APPCMD_CLIENTONLY, 0);
DdeConnectList(idInst, 0L, 0L, 0L, NULL);
hConv = 0L;
while (hConv = DdeQueryNextServer(hConvList, hConv)) {
   ci.cb = sizeof(ci);
   DdeQueryConvInfo(hConv, QID_SYNC, &ci);
   DdeQueryString(idInst, ci.hszSvcPartner, s, sizeof(s), CP_WINANSI);
   printf("Service: %s\n", s);
}
DdeUninitialize(idInst);
-- 
S.L.

Grazie.... Provo subito,
Luca


Questo č quello che ho compilato....
Ma il tisultato č: non stampa un bel niente!! Sigh :(
Spero di aver sbagliato io in qualche dichiarazione di variabile,
Luca
----------------------------------------------------------------------------
------------------
#include <windows.h>
#include <ddeml.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
DWORD idInst;
HCONV hConv;
HCONVLIST hConvList;
CONVINFO ci;
char s[256];
idInst = 0;
DdeInitialize(&idInst, NULL, APPCMD_CLIENTONLY, 0);
DdeConnectList(idInst, 0L, 0L, 0L, NULL);
hConv = 0L;
while (hConv = DdeQueryNextServer(hConvList, hConv)) {
   ci.cb = sizeof(ci);
   DdeQueryConvInfo(hConv, QID_SYNC, &ci);
   DdeQueryString(idInst, ci.hszSvcPartner, s, sizeof(s), CP_WINANSI);
   printf("num...\n");
   printf("Service: %s\n", s);
}
  DdeUninitialize(idInst);
  system("PAUSE");
  return 0;
}

Ciao,
ho scoperto....
C'era un errore in questa linea:
  DdeConnectList(idInst, 0L, 0L, 0L, NULL);
Che invece doveva essere:
  hConvList = DdeConnectList(idInst, 0L, 0L, 0L, NULL);
Inoltre con LCC non ne vuole sapere, mi stampa sempre tre righe vuote!!
Ma per curiosità ho provato con Dev-C++ versione 4.9.8.0 con supporto al Gcc
3.2 addattato a windows. E lo stesso codice senza la minima modifica
funziona perfettamente!!!!
Cavoli, ma perchè gcc si e LCC no???? BO????? Adesso che comunque so dove è
il problema mi ci picchierò :)
Bye e ancora grazie infinite,
Luca Landi