Results 1 to 14 of 14

Thread: Reacties op artikel 'IPC introductie'

  1. #1

    Reacties op artikel 'IPC introductie'

    Er is in het verleden een aantal keer gevraagd over hoe je "communicatie tussen twee applicaties" kunt realiseren. In dit artikel zal ik proberen hier wat dieper over in te gaan en laten zien dat het niet al te moeilijk is om IPC te realiseren.

    Lees het artikel

    ...of reageer op dit artikel als reply op deze thread.
    Marcel

  2. #2
    Ik geloof dat:

    function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM;
    lParam: LPARAM): LRESULT; stdcall;
    function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM;
    lParam: LPARAM): BOOL; stdcall;
    de 2 Sendmessage ==> PostMessage moet zijn.

    Misschien kan je nog het verschil tussen sendmessage en postmessage in het artikel beschrijven

    Voor de rest leuke artikel
    Last edited by Link; 29-Jun-03 at 21:48.

  3. #3
    Ik denk het ook, dus ik heb 'm aangepast. Was dat niet goed dan horen we het wel van Dunebuggy.
    Marcel

  4. #4
    Yep, bedankt voor de wijziging. Dat krijg je wanneer je copy paste gebruikt

    groet,
    Daniel

  5. #5
    Kleine opmerking:
    Ergens in App1 staat:

    MyMessageID := RegisterWindowMessage('MyMessage');
    SendMessage(HWND_BROADCAST, MessageID, 0, 0);
    Moet dit niet anders zijn nl.:
    SendMessage(HWND_BROADCAST, MyMessageID, 0, 0);
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  6. #6
    Een korte maar duidelijke uitleg over de WM_COPYDATA techniek. Ik denk dat dit toch wel de meest gebruikte techniek zal zijn voor veel applicaties, aangezien het redelijk eenvoudig te implementeren is en het werken met messages -zoals je zelf al aangaf- bij de meesten in basis al bekend is. Daarom is het wel goed dat je met deze techniek bent begonnen.

    Toch vind ik het wel jammer dat er zo weinig wordt ingegaan op de andere technieken. Natuurlijk is het één te moeilijk en het ander te ouderwets, dus ik snap dat we geen volledige uitleg van alle technieken krijgen, maar wat basisuitleg over wat de rest allemaal inhoudt zou ik wel prettig vinden. Ik heb bij een aantal van deze termen namelijk uuml;berhaupt geen idee wat het is.
    1+1=b

  7. #7
    @D7EE: klopt

    @GolezTrol:

    Hmm, zodra ik wat tijd over heb ga ik wat meer uitleg geven.

    Groet,
    Daniel

  8. #8

    Talking

    Originally posted by Dunebuggy
    @D7EE: klopt

    @GolezTrol:

    Hmm, zodra ik wat tijd over heb ga ik wat meer uitleg geven.

    Groet,
    Daniel
    Daniel, was tof artikel.

  9. #9
    Senior Member rieni's Avatar
    Join Date
    Mar 2001
    Location
    Br?©ttum bij Lillehammer, Noorwegen
    Posts
    342
    Interessant artikel !
    Maar nu probeer ik ongeveer hetzelfde te doen, maar dan naar een andere applicatie. Daarbij zend ik een string over. maar in mijn 'ontvangende' applicatie krijg ik alleen maar vreemde woorden en tekens in m'n listboxje.

    Kun je je voorbeeld aanpassen voor 2 applicaties?

    Rieni

  10. #10
    Hierbij een demo project.

    Wat betreft die vreemde tekens. Er staat een fout in de code aan het eind van m'n artikel.. Tja code niet goed doorgetest natuurlijk

    Code:
    CopyDataStruct.cbData := Length(sText);
    CopyDataStruct.lpData := PChar(sText);
    moet natuurlijk zijn:

    Code:
    CopyDataStruct.cbData := Length(sText) + 1; // Vergeet de #0 niet mee te nemen !!!
    CopyDataStruct.lpData := PChar(sText);
    Hopelijk heb je wat aan de demo.

    Groet,
    Daniel
    Attached Files Attached Files

  11. #11
    Mischien handig om te weten:
    Bij delphi 7 (ik heb enterprise) zit ook nog een een ipc demo (client server)
    Borland\delphi7\demos\ipcdemos

  12. #12
    Hoi,

    Mooi voorbeeld over het gebruik van andere technieken om IPC te realiseren.

    In die demo word gebruik gemaakt van Shared Memory en Signalled objects om data (events) over te zenden van de clients naar de monitor toe.

    Groet,
    Daniel

  13. #13
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    OK. Ik heb het gelezen en vind het een leuk artikel. Ik ben zelf eens wat aan het experimenteren geweest. Waar ik problemen mee heb in het artikel is dit:
    Code:
    procedure TForm1.SendText(sText: String);
    var
        CopyDataStruct: TCopyDataStruct;
    begin
        CopyDataStruct.dwData := Self.Handle;
        CopyDataStruct.cbData := Length(sText);
        CopyDataStruct.lpData := PChar(sText);
        SendMessage(Self.Handle, WM_COPYDATA, FSessionHandle, lParam(@CopyDataStruct));
    end;
    Volgens mij was het je bedoeling dat er eerst Handle's uitgewisseld werden middels de geregistreerde Message. Nu we het daarover hebben FSessionHandle zou dan eigenlijk een ander type moeten hebben (en een andere naam) omdat je in het FormCreate hier een MessageID in opslaat.

    Dus Self.Handle zou de ontvangen handle moeten zijn en FSessionHandle zou Self.Handle moeten zijn.
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  14. #14
    Hoi Mattijs,

    Volgens mij was het je bedoeling dat er eerst Handle's uitgewisseld werden middels de geregistreerde Message. Nu we het daarover hebben FSessionHandle zou dan eigenlijk een ander type moeten hebben (en een andere naam) omdat je in het FormCreate hier een MessageID in opslaat.
    De bedoeling van de FSessionHandle was eigenlijk meer bedoeld als een unieke code die in de WndProc van het formulier getest zou moeten worden, wat nu niet gedaan wordt. Wanneer dan een WM _COPYDATA message binnen zou komen kunnen we aan de hand van de wparam testen of we te maken hebben met data van onze chat applicatie.

    In deze context fungeerd FSessionHandle niet als een message maar meer als identificatie van deze ipc chat sessie. Ik heb bewust gekozen om het ding een handle te noemen en zo ook te initialiseren. HWND is uitwisselbaar met Cardinal.

    Dus Self.Handle zou de ontvangen handle moeten zijn en FSessionHandle zou Self.Handle moeten zijn.
    Voor het laatste code voorbeeld in het artikel had ik al gemeld: "Dit voorbeeld dient echter alleen als referentie over hoe je de besproken onderdelen kunt aanmaken en gebruiken."
    Het downloadable zip bestand wat ik bij deze thread bevat een wat meer bruikbaar voorbeeld. Ook daar zou je kunnen zeggen dat FDataRequestMsg slecht gekozen is omdat je niet vraagt om data maar direct een message stuurt.

    Self.Handle in het laatste voorbeeld van het artikel is in deze ook de ontvanger. FSessionHandle had niet Self.Handle moeten zijn omdat het meer bedoeld is als unieke code voor de text overdracht.

    Wat je natuurlijk in een uitgebreide ipc communicatie kunt verwachten is dat een client zich bekend maakt door eerst zijn eigen client handle via een door te sturen naar de server die dan naar die handle een WM_COPYDATA message met data zend. Wanneer een ipc server data wil versturen kan deze natuurlijk eerst vragen middels broadcast een geregistreerde request message sturen welke ipc clients er zijn en dan bij elke reply van een client een WM_COPYDATA message te sturen naar de desbetreffende client.

    Groet,
    Daniel

    ps : had je de laatste versie van het zip bestand al bekeken ?

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 21
    Last Post: 09-Aug-07, 19:56
  2. Reacties op artikel 'Rave artikel 1: De basis'
    By Marcel in forum De website
    Replies: 14
    Last Post: 26-Jul-05, 10:05
  3. Reacties op artikel 'Introductie tot SQL'
    By Marcel in forum De website
    Replies: 12
    Last Post: 29-Oct-03, 23:48
  4. Replies: 9
    Last Post: 25-Aug-03, 21:37

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •