Just nu i M3-nätverket
Jump to content

Kommunikation mellan program


h4an

Recommended Posts

Hej

Går det att kommunicera mellan 2 st VB6 program på samma dator? Frågan kanske verkar lite underlig, men jag har en DLL som används från en IIS server och nu vill jag ”hissa” en event i ett VB6 program som går på samma dator som IIS serven ligger.

 

/Håkan

 

 

Link to comment
Share on other sites

hubbemannen

Hej, det lär gå utmärkt.

 

Just nu kan jag bara peka ut några uppslag åt dej, kanske kan någon annan e-forumare komma med de detaljer som behövs. (Och kanske med ännu bättre idéer).

 

1. Du kan utforma din "event-hissare" som ett ActiveX-objekt och låta din lyssnare koppla till den. (Exempel från VB: Sätt en referens till Excel Object Library, deklarera

 

Private WithEvents XL As Excel.Application

 

Titta sedan i den vänstra fälle-boxen ovanför kod-fönstret -XL- finns med i listan. Välj XL, titta sedan i den högra fälle-boxen och du bör se de Events som kan hissas av Excel.Application. Detta för att Excel är skrivet som ActiveX-server - du skulle kunna skriva ditt VB6-program på motsvarande sätt och låta din "lyssnare" koppla till "hissaren".

 

2. DDE kan användas för att kommunicera mellan VB6-program, även om många nuförtiden fnyser åt DDE.

 

Lycka till!

mvh

hubbemannen

 

EDIT1 Hoppla! Jag har bara tillgång till VB5 och kan inte svära på att DDE stöds även i VB6.

 

 

[inlägget ändrat 2005-07-29 14:47:39 av hubbemannen]

Link to comment
Share on other sites

Mina 2 hjärnceller tycks inte kunna samarbeta idag. Jag har nu testat med DDE utan någon större framgång. De exempel som finns i VB mot ett Excel blad fungerar utmärkt, men när jag försöker översätta dem för att 2 VB program skall snacka med varandra så får jag ”No foreing application responded to a DDE initiate”. Vad gör jag för fel?

 

Jag har Program1 med en form frmGet och 5 textboxar Text1 – Text5, ingen kod eller deklarationer.

 

I Project1 har en form Form1 och en textbox Text1 och följande kod som är modifierad från VB exemplet för Excel:

 

[color="#0000ff"]Option Explicit[/color]

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] Form_Click()
   [color="#0000ff"]Dim[/color] CurRow As [color="#0000ff"]String[/color]
   Static Row   [color="#006400"]' Worksheet row number.[/color]
   Row = Row + 1   [color="#006400"]' Increment Row.[/color]
   [color="#0000ff"]If[/color] Row = 1 [color="#0000ff"]Then[/color]   [color="#006400"]' First time only.[/color]
      [color="#006400"]' Make sure the link isn't active.[/color]
      Text1.LinkMode = 0
      [color="#006400"]' Set the application name and topic name.[/color]
      Text1.LinkTopic = [GRÅ]"Program1|frmGet"[/GRÅ]
      Text1.LinkItem = [GRÅ]"Text1"[/GRÅ]   [color="#006400"]' Set LinkItem.[/color]
      Text1.LinkMode = 1   [color="#006400"]' Set LinkMode to Automatic.[/color]
   [color="#0000ff"]Else[/color]
      [color="#006400"]' Update the row in the data item.[/color]
      CurRow = [GRÅ]"Text"[/GRÅ] & Row
      Text1.LinkItem = CurRow   [color="#006400"]' Set LinkItem.[/color]
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Felet kommer på raden: Text1.LinkMode = 1

 

/Håkan

 

Link to comment
Share on other sites

hubbemannen

Håkan, om du kan tåla dig till måndag (och inte själv löst det till dess) så ska du få ett exempel på DDE-kommunikation mellan 2 VB-program då.

 

Har filerna på jobbet, därav väntetiden.

 

En liten fundering dock: Har du gjort .exe-fil av program1, eller kör du båda projekten från VB:s IDE? - Jag vill minnas att en av knutarne var att motsvarigheten till ditt Program1 var tvunget att vara kompilerat och kört som .exe. Dessutom måste det ju förståss vara igång när din Form_Click-kod ska exekvera.

 

mvh

hubbemannen

 

Link to comment
Share on other sites

hubbemannen

Hej Håkan, har du fått din kommunikation att spela, eller skulle du ha glädje av ett fungerande exempel?

 

mvh

hubbemannen

 

Link to comment
Share on other sites

hubbemannen

Hej Håkan, hoppas jag nu inte lovat för mycket - mitt

exempel är gjort i VB5.

 

Viss reservation för terminologin; minns att jag tyckte den

var lätt förvirrande när jag en gång i tiden skulle göra en VB-

tillämpning som drog data från en annan applikation via DDE.

 

Exemplet innebär två projekt, MASTER.vbp och SLAVE.vbp.

 

SLAVE tar kontakt (initierar DDE) med MASTER, varefter

MASTER kommenderar SLAVE-fönstret.

 

1. MASTER-projektet:

 

Gör ett formulär frmMaster med en textbox COMMAND och en

knapp cmdOK.

 

frmMaster ska ha Caption=Master.

 

Klistra in formulärskod:

 

[color="#0000ff"]Option Explicit[/color]
Option Base 1
[color="#006400"]'[/color]
[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] cmdOK_Click()
  Unload Me
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Kompilera detta till exefilen MASTER.exe.

Du kan nu starta MASTER.exe.

 

2. SLAVE-projektet:

 

Gör ett formulär frmSlave med en textbox txtCommand, en knapp

cmdConnect och en knapp cmdOK.

 

Låt frmSlave ha Caption=Slave

Låt txtCommand ha locked=True.

 

Klistra in formulärskod:

 

[color="#0000ff"]Option Explicit[/color]
Option Base 1
[color="#006400"]'[/color]
[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] cmdConnect_Click()
  txtCommand.LinkMode = vbLinkNone
  txtCommand.LinkTopic = [GRÅ]"MASTER|MASTER"[/GRÅ]
  txtCommand.LinkItem = [GRÅ]"COMMAND"[/GRÅ]
  txtCommand.LinkMode = vbLinkAutomatic

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
[color="#006400"]'[/color]
[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] cmdOK_Click()
  Unload Me
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
[color="#006400"]'[/color]
[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] txtCommand_Change()
  [color="#0000ff"]Dim[/color] sCommand As [color="#0000ff"]String[/color]
  sCommand = [color="#0000ff"]Ucase[/color](txtCommand.Text)
  [color="#0000ff"]Select[/color] [color="#0000ff"]Case[/color] sCommand
    [color="#0000ff"]Case[/color] [GRÅ]"HIDE"[/GRÅ]
      Me.Hide
    [color="#0000ff"]Case[/color] [GRÅ]"SHOW"[/GRÅ]
      Me.Show
    [color="#0000ff"]Case[/color] [GRÅ]"END"[/GRÅ]
      Unload Me
  [color="#0000ff"]End[/color] [color="#0000ff"]Select[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Starta Slave från VB:s IDE med F5.

 

Arrangera fönstrena Master och Slave så att du ser dem bredvid

varandra. Se till så textboxen i Master-fönstret är tom.

(Står där end kommer du direkt tillbaka till IDE efter tryck

på Connect-knappen i Slave; se nedan!)

 

Tryck på Connect-knappen i Slave-fönstret.

 

Skriv hide i textboxen i Master-fönstret-

då bör Slave-fönstret bli osynligt.

 

Skriv show i textboxen i Master-fönstret-

då bör Slave-fönstret bli synligt igen.

 

Skriv nånting annat i textboxen i Master-

fönstret-(typ komm funkar) - det bör då dyka upp

även i texboxen i Slave-fönstret.

 

Skriv end i textboxen i Master-fönstret-

då bör du hamna i VB:s IDE.

 

Hoppas detta funkar även hos dig att det kan vara något att

spinna vidare på.

 

mvh

hubbemannen

 

Link to comment
Share on other sites

Tyvärr så vill det inte fungera för mig i VB6. Jag tycker att jag har försökt det mesta t.o.m. lagt Master i Autostart men inget hjälper jag får:

”No foreing application responded to a DDE initiate” på LinkMode raden i Slave programmet.

 

/Håkan

 

Link to comment
Share on other sites

hubbemannen

Hej Håkan, det var tråkigt att det inte ville sej.

 

Så lätt ska vi dock inte ge upp,tycker jag. Om tid finns imorgon kommer jag att kompilera både Master o. Slave och försöka köra dem under NT4, Win2K och WinXPProf. Meddelar utfallet när det är klart.

 

Ev. skulle det kunna vara något lurt antingen med ditt OS eller din VB6 installation, men låt oss avvakta med dessa spekulationer.

 

Vi får väl oxå vädja till andra e-forumare som läser detta - kanske är det någon därute som har den pusselbit som fattas för oss!

 

mvh

hubbemannen

 

EDIT1:

Länk till sida med DDE-info

http://www.angelfire.com/biz/rhaminisys/ddeinfo.html

[inlägget ändrat 2005-08-02 19:48:37 av hubbemannen]

EDIT2:

Ännu ett exempel:

http://www.activevb.de/tipps/vb6tipps/tipp0404.html

[inlägget ändrat 2005-08-02 20:02:33 av hubbemannen]

Link to comment
Share on other sites

Anjuna Moon

Du måste även sätta LinkMode till Source och LinkTopic till Master i formulärets properties i Master.exe

Fungerar utmärkt för mig

 

Link to comment
Share on other sites

hubbemannen

Tack för det Anjuna Moon!

 

Hade en svag aning om att det var någon info som fattades när jag skrev mitt förslag till Håkan, men var för slö för att kolla det ordentligt!

(Givetvis funkar det hos mej oxå; annars hade jag inte gjort mitt inlägg).

 

Hoppas det funkar för Håkan oxå med denna tilläggsinfon.

 

mvh

hubbemannen

 

Link to comment
Share on other sites

Tack hubbemannen och Anjuna Moon, för er hjälp. Vist nu fungerar det även för mig. Ska nu plocka in detta i mitt egen projekt.

 

Kan man marker på något sätt att tråden är löst? Hittar inte det.

 

/Håkan

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...