AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IPC zwischen zwei Programmen

Ein Thema von Digielm · begonnen am 18. Okt 2010 · letzter Beitrag vom 19. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#1

IPC zwischen zwei Programmen

  Alt 18. Okt 2010, 16:30
Delphi-Version: 2007
Hallo Leute,

ich hab da immernoch ein riesen Problem.

Ich möchte gerne folgenden machen.

Es gibt 2 Programme die untereinander Daten tauschen sollen.
Mit Messages klappt das nicht so wirklich, da die Daten immer kompl. gesendet bzw. empfangen werden müssen.

Ich hab die Idee das ein Programm einen Channel aufmacht und das andere Programm je nach bedarf den channel ausliest.

Ich hab da auch Source in C# kriege das aber nicht umgebaut in Delphi Dot Net 2007

Wer kann mir helfen wäre suppi da was für zu kriegen .


Danke im Voraus
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: IPC zwischen zwei Programmen

  Alt 18. Okt 2010, 16:36
Mit Messages klappt das nicht so wirklich, da die Daten immer kompl. gesendet bzw. empfangen werden müssen.
Was für Nachrichten?

Dann gibt es da noch MMF, Pipes, TCP/IP, ...
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#3

AW: IPC zwischen zwei Programmen

  Alt 18. Okt 2010, 17:02
Ich weiß nicht wie aber ich hab hier mal ein Source Beispiel von C#

Würde das gerne so oder so ähnlich umsetzen.

Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using Remoteable;

namespace IPCChannelRemoting
{
    /// <summary>
    /// Remote Objekt ermöglicht der GN Server Config GUI den Status Abruf der
    /// GN Servers über den IPC Channel.
    /// </summary>
    public class RemoteObj : MarshalByRefObject,
            ISharedAssemblyInterface
    {
        /// <summary>
        /// Konstruktor
        /// </summary>
        public RemoteObj()
        {

        }

        /// <summary>
        /// Ruft den aktuellen Status der angemeldeten GN User ab.
        /// Jeder User wird in eine string Array gespeichert.
        /// Die Gesamtheit aller User in einer ArrayList.
        /// </summary>
        /// <returns>ArrayList mit GN-UserInfos</returns>
        public ArrayList GetUserList()
        {
            ArrayList result = new ArrayList();
            foreach (ClientInfo client in MainClass.TCPServer.ClientList)
            {
                string[] values = new string[7];
                values[0] = client.Line;
                values[1] = client.strName;
                values[2] = client.socket.RemoteEndPoint.ToString();
                values[3] = client.Status.ToString("G");
                values[4] = client.CallHandle.ToString();
                values[5] = client.Number;
                values[6] = client.Direction.ToString();
                result.Add(values);
            }
            return result;
        }

        /// <summary>
        /// Ruft den aktuellen Stand der TAPI-Lines ab.
        /// Jede TAPI Line wird in einem string Array gespeichert. Die
        /// Gesamtheit alle Lines wird in einer ArrayList gespeichert.
        /// </summary>
        /// <returns>ArrayList mit den TAPI Line Infos</returns>
        public ArrayList GetLines()
        {
            ArrayList result=new ArrayList();
            TAPILines tapiLines = frmMain.TAPILinesList;
            foreach (TAPILine tl in tapiLines.TapiLinesList)
            {
                string[] values = new string[8];
                values[0] = tl.AddressName;
                values[1] = tl.DeviceName;
                values[2] = tl.GWUserName;
                values[3] = tl.CallActive.ToString();
                values[4] = tl.CallHandle.ToString();
                values[5] = tl.CallCalledID;
                values[6] = tl.CallCallerID;
                values[7] = tl.CallBegan;
                result.Add(values);
            }
            return result;
        }

        /// <summary>
        /// Test Methode um IPC Verbindung zu testen.
        /// </summary>
        /// <returns></returns>
        public string GetTest()
        {
            return "Test";
        }
    }
}

namespace Remoteable
{
    /// <summary>
    /// Interface für das Remote Objekt der IPC Verbindung.
    /// </summary>
    public interface ISharedAssemblyInterface
    {
        ArrayList GetUserList();
        ArrayList GetLines();
        string GetTest();
    }
}
der Vorteil dabei wäre, wenn ich vom Client aus die arraylisten abfrage sind diese immer aktuell.

Nur irgendwie beiße ich mir grade die Zähne an der Umsetzung in Delphi aus.

Hat da jemand einen TIP ??
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: IPC zwischen zwei Programmen

  Alt 18. Okt 2010, 17:15
Ich denke, dafür wäre es am besten, ein MMF zu verwenden. Dann kannst du von beiden Programmen aus gleichberechtigt zugreifen.
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
535 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: IPC zwischen zwei Programmen

  Alt 18. Okt 2010, 19:51
Wie ist es mit einer Datenbank wie z.B. Firebird? Zwei Programme greifen auf dies zu und die ganze Sache wird einfach.


Gruß

Ralf
Ralf
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#6

AW: IPC zwischen zwei Programmen

  Alt 18. Okt 2010, 21:00
Wie ist es mit einer Datenbank wie z.B. Firebird? Zwei Programme greifen auf dies zu und die ganze Sache wird einfach.
Du willst für einfache IPC nen kompletten Datenbankserver aufsetzen? Das macht die Sache nicht einfach, sondern ungeheuer komplex und führt eine ganz neue Komplexität in Sachen potentiellen Fehlern ein (Läuft die DB? Sind die Programme beide richtig für die DB konfiguriert? etc.).

Was hältst Du von Messagequeues? Sind ne ganz simple Geschichte in .NET, weil man nur die Queue aufmacht und reinschreibt und der andere empfängt die Nachrichten und gut ist.

Siehe den Artikel hier: http://articles.techrepublic.com.com...1-6170794.html
Übersetzen muss man da nix großartig, weil die Methoden und Eigenschaften ja eh gleich heissen. Referenz auf System.Messaging setzen und ab die Post
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: IPC zwischen zwei Programmen

  Alt 19. Okt 2010, 02:22
Aber Delphi 5 kann mit C# und .net nicht viel anfangen, wenn ich mich nicht irre.

Message Queues machen Sinn, wenn Nachrichten (z.B. Statusmeldungen oder dergleichen) zwischen Prozessen ausgetauscht werden sollen.
Wenn zwei Programme einen gemeinsamen Datenbestand verwenden sollen, ist ein Memory mapped File die bei weitem einfachere Methode.

Geändert von idefix2 (19. Okt 2010 um 02:25 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

AW: IPC zwischen zwei Programmen

  Alt 19. Okt 2010, 07:26
Aber Delphi 5 kann mit C# und .net nicht viel anfangen, wenn ich mich nicht irre.
Für Microsoft Message Queue (das bei jeder Windows Version enthalten ist) kann man in Delphi das ActiveX importieren.

Mit Message Queues kann man auch einfache RPC-style Dienste bauen, d.h. Client A sendet eine Nachricht mit einer Anforderung, und B liest diese und sendet an A die Antwort zurück.

Vorteile von Message Queues (hängen vom Broker ab): zum Beispiel Unterstützung von Transaktionen. MSMQ muss ich mir aber erst noch mal näher ansehen...
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#9

AW: IPC zwischen zwei Programmen

  Alt 19. Okt 2010, 08:44
Aber Delphi 5 kann mit C# und .net nicht viel anfangen, wenn ich mich nicht irre.
Hab ich jetzt was massives verpasst, oder wie kommst Du auf Delphi 5??
Digielm meinte doch Delphi für .NET 2007 (*schauder*), und nicht Delphi 5?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#10

AW: IPC zwischen zwei Programmen

  Alt 19. Okt 2010, 10:49
Wie ist es mit einer Datenbank wie z.B. Firebird? Zwei Programme greifen auf dies zu und die ganze Sache wird einfach.
Du willst für einfache IPC nen kompletten Datenbankserver aufsetzen? Das macht die Sache nicht einfach, sondern ungeheuer komplex und führt eine ganz neue Komplexität in Sachen potentiellen Fehlern ein (Läuft die DB? Sind die Programme beide richtig für die DB konfiguriert? etc.).

Was hältst Du von Messagequeues? Sind ne ganz simple Geschichte in .NET, weil man nur die Queue aufmacht und reinschreibt und der andere empfängt die Nachrichten und gut ist.

Siehe den Artikel hier: http://articles.techrepublic.com.com...1-6170794.html
Übersetzen muss man da nix großartig, weil die Methoden und Eigenschaften ja eh gleich heissen. Referenz auf System.Messaging setzen und ab die Post
So hab das mal versucht zu machen bekomme aber diese Fehlermeldung
"Message Queuing wurde auf diesem Computer nicht installiert"

Wie kann ich das denn auch ohne diese Installation hinbekommen, da weder ich noch die meisten Kunden dieses Feature installiert haben.
Es muss ja auch irgendwie anders gehen .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz