Newsgroup: it.comp.lang.delphi
Titolo: Assurdo ma vero: come comunicare con VB3?

 Ciao a tutti
     ho l'incredibile problema (nel 2004 č roba da matti) di dover 
comuncare da Delphi con un programma scritto con VB3. Qualcuno ha qualche 
idea un pň piů elegante di quella che č venuta a me e cioč di usare file 
su disco?
Grazie a tutti
Ciao, Mario
--- posted by geoForum on 
http://www.delphiedintorni.it

 Ciao, Mario
Andrea

 comuncare da Delphi con un programma scritto con VB3. 
magari qualche dettaglio in piu'....
A

 DDE?
Sconsiglio caldamente l' utilizzo di DDE.
La stessa microsoft ne ha abbandonato lo sviluppo nonostante il bugfix
banale.
Ci sono molte tecniche IPC valide. Prova con i Memory Mapped Files
--
- Carlo -

Ci sono molte tecniche IPC valide. Prova con i Memory Mapped Files
Ciao a tutti
    per quanto riguarda l'uso dei memory mapped file mi ero già informato 
(sulla bibbia (leggi: i libri di Marco Cantù)) però sono stati 
implementati, da quello che sono riuscito a trovare in letteratura (il 
libro di Daniel Appleman dal titolo "Visual Basic Vin 32 API" che comprai 
quando ancora usavo VB) solo a partire da Windows a 32 Bit e quindi le 
API corrispondenti non sono usabili da VB3 che è a 16 Bit (ripeto: questo 
è quello che ho capito; correggetemi se sbaglio).
Ora i dettagli: ho fatto con Delphi una DLL in grado di comunicare con 
qualsiasi altro programma che la richiami; la sua peculiarità è che ha il 
compito di intercettare i dati che arrivano da un dispositivo connesso 
alla seriale, incapsulare tutte le elaborazioni necessarie e generare un 
messaggio di tipo Wm_CopyData, tramite cui passare una sringa strutturata 
con i dati in gioco, al programma chiamante, il cui handle è stato 
passato alla DLL tramite la funzione esportata di apertura della com. 
Grazie a ciò, chi usa la DLL si limita a programmare ad eventi: quando un 
dato è pronto, all'utilizzatore scatta la procedura che lui stesso ha 
scritto in risposta al messaggio Wm_copyData. Purtroppo il primo 
utilizzatore che mi è capitato usa VB3 che, essendo a 16bit, non riesce 
nemmeno a caricare la DLL e tanto meno ad intercettare il messaggio 
wm_CopyData. Il resto lo sapete.
Lo scopo è trasferire all'applicazione client (se così si può dire) una 
stringa generando nel contesto un evento, in modo da non costringerlo a 
fare polling. Oppure, riuscire ad usare da VB3, la mia DLL a 32Bit 
gestendo l'incompatibilita 16<->32Bit.
Mi stò documentando sul DDE: sembra una buonissima idea; tanto Delphi 
quanto VB3 lo supportano e non è molto importante se Microsoft ne ha 
abbandonato lo sviluppo perchè mi serve per risolvere questo problema 
specifico che, non lo nego, mi stà stimolando più di quello che non avrei 
pensato.
Un grazie di cuore a tutti per il prezioso aiuto.
Ciao, Gian Mario


 messaggio wm_CopyData. Il resto lo sapete.
Devi usare Delphi 1 per compilarla.
Andrea

 gestendo l'incompatibilita 16<->32Bit.
Questa cosa č fattibile, in teoria.
Dovrsti vedere il WOW e il Tunk (credo i scrive cosi.
Se poi il DDE risolve, tanto di guadagnato xche credo che il tunk e wow 
siano abbastanza incasinati.
A

 su disco?
perche' vuoi complicarti la vita con metodi astrusi? usa il metodo piu'
semplice e che ti faccia perdere meno tempo: i file su disco vanno
benissimo. Che controindicazioni ci vedi?


sto cominciando a pensarci: il DDE mi fa tribulare anche solo in Delphi 
(costruendo server e client: non riesco a stabilire la connessione; 
figuriamoci quando il server diverrà VB3). L'unica cosa è che mi 
piacerebbe inviare un messaggio a VB per fargli capire che è disponibile 
un nuovo dato.
Sone effettivamente allo stremo: mi sa che dovrò ripiegare sul file.
PS: mi hai fatto fare una bella risata, alla lettura del tuo messaggio: 
effettivamente un fondo di masochismo c'è in quello che mi sono prefisso.
Ciao, Mario.


Andrea
Ciao Andrea
     non so come ringraziarti: con la tua idea sono riuscito a fare 
proprio quello che volevo; devo confessare che è stata dura, ma alla fine 
sono riuscito a fare tutto e mi sono pure divertito: mettendo il LinkMode 
a Notify (in VB3), non solo ottengo la stringa inviata dalla Dll Delphi 
(a dire il vero c'è un programmino che chiama la DLL da una parte e 
implementa il DDE con VB3 dall'altra, ma il succo non cambia), ma genero 
contestualmente un evento (il LinkNotify della casella di testo cui ho 
legato il DDE). Determinante, dal lato Delphi, è stato il metodo del 
componente TDdeServerConv che copia il Link DDE negli appunti 
(DdeServerConv.CopyToClipboard) e, dal lato VB3, la voce del menù 
Edit "Paste Link" con la TextBox evidenziata, che mi ha infilato al posto 
giusto i valori corretti per le proprietà che definiscono la 
comunicazione stessa (le proprietà LinkItem e LinkTopic) che poi ho messo 
sul metodo load della form in modo da impostarli a runtime: senza questi 
due aiuti sarebbe stato impossibile. Alla fine il canale di comunicazione 
è bidirezionale; questo lo sfrutto per terminare il server Delphi alla 
chiusura del programma VB3, inviando al server la stringa CloseServer.
Grazie di cuore, senza il tuo suggerimento non mi sarebbe mai venuto in 
mente questa tecnica.
Ciao, Gian Mario.


 Ciao, Gian Mario.
Andrea