![]() |
Delphi-Version: 2007
IPC zwischen zwei Programmen
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 |
AW: IPC zwischen zwei Programmen
Zitat:
Dann gibt es da noch MMF, Pipes, TCP/IP, ... |
AW: IPC zwischen zwei Programmen
Ich weiß nicht wie aber ich hab hier mal ein Source Beispiel von C#
Würde das gerne so oder so ähnlich umsetzen.
Code:
der Vorteil dabei wäre, wenn ich vom Client aus die arraylisten abfrage sind diese immer aktuell.
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(); } } Nur irgendwie beiße ich mir grade die Zähne an der Umsetzung in Delphi aus. Hat da jemand einen TIP ?? |
AW: IPC zwischen zwei Programmen
Ich denke, dafür wäre es am besten, ein MMF zu verwenden. Dann kannst du von beiden Programmen aus gleichberechtigt zugreifen.
|
AW: IPC zwischen zwei Programmen
Wie ist es mit einer Datenbank wie z.B. Firebird? Zwei Programme greifen auf dies zu und die ganze Sache wird einfach.
Gruß Ralf |
AW: IPC zwischen zwei Programmen
Zitat:
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: ![]() Ü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 ;-) |
AW: IPC zwischen zwei Programmen
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. |
AW: IPC zwischen zwei Programmen
Zitat:
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... |
AW: IPC zwischen zwei Programmen
Zitat:
Digielm meinte doch Delphi für .NET 2007 (*schauder*), und nicht Delphi 5? |
AW: IPC zwischen zwei Programmen
Zitat:
"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 . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz