Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » datenaustausch zw. 2 Progrmamen mittel Shared Memory?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.04.2005, 16:15 Uhr
~Arthur
Gast


Hi, ich bin relativer anfänger im c++ programmieren bzw programmieren überhaupt.

bräuchte Hilfe bei einem Problem, wo ich nicht weiter komme:

ich möchte einen Datenaustausch zwischen 2 Progrmamen realisieren, die auf einem Rechner laufen.
Ich möchte dies jedoch nicht über eine Datei realiesieren.

nach längeren suchen in der Borland Hilfe und im Internet hab ich immer noch keine Lösung.

Also hab rausgefunden, das es da verschiedene möglichkeiten gibt, über DDE, OLE, Sockets, COM, und halt shared memory.

die letztere variante will ich verwenden, habe aber keine ahnung, wie ich das im Borland c++ anstellen kann. (ich muss Borland c++ zum programmieren verwenden)

ich habe dann noch in der beigefügen Windows-Programmierung - Hilfedatei nachgeschaut.

Dort hab ich die API-Funktionen (glaube das es welche sind)

CreatFileMapping und OpenFileMapping gefunden, und versucht damit etwas anzufangen.

leider komme ich damit nicht klar, hab keinen schimmer, wie ich dem wert eine struktur oder variable zb zuweisen kann. also, wie ich eine bestimmte variable in den sharad memory legen kann. die hilfe hilft mir da leider auch nicht weiter.

ps: wie funktionieren die sachen mit dem Handle, was ist enum für ein datentype
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.04.2005, 21:26 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Hallo,
Wenn es die nur darum geht, die Programme untereinander "kommunizieren" zu lassen solltest du da nicht großartik mit irgendwelchen exotischen Methoden rumexperimentieren; SendMessage() und PostMessage() sind dann alles, was du brauchst!

Zu dem ps.:
Ein Handle ist sozuzeigen ein verweis auf etwas, welcher der Addressierung bzw. dem Zugriff darauf dient (sozusagen zur "Handhabung" ;-))... naja, ist schwer zu beschreiben...
enum ist kein eigener Datentyp sondern dient der Deklaration eigener Datentypen, welche nur einen von diverses vorgegebenen Werten annehmen können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.04.2005, 23:06 Uhr
~CDW
Gast


ich kenne von Borland zwar nur die IDE Delphi, aber soweit ich weiß hat die C++ IDE von Borland die gleichen Komponenten und benutzt auch die gleiche VCL (bin mir hier nicht 100% sicher). Das heißt dass es die Socketkomponenten schon gibt und in Delphi sind diese "kinderleicht" zu bedienen. Suche einfach im Netz nach ein paar tutorials.
Damit hat man gleich den Vorteil dass die Programme auch auf verschiedenen Rechner genauso die Daten austauschen können. Und auf dem lokalrechner ist der Austausch sehr flott.


Zitat:
SendMessage() und PostMessage() sind dann alles, was du brauchst!

dafür muss er aber eine Nachrichtenbearbeitungsroutine einfügen... imho ist das genausoviel
wie die Sockets umsetzen

Es gibt aber auch noch Pipes die man zur kommunikation nutzen kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.04.2005, 07:41 Uhr
~Arthur
Gast


öhm ja, die sache mit den Sockets, da gibts mehrere sachen einmal unter der karteikarte internet und dann noch unter indy-client und indy-server. was jetzt IDE bedeutet weis ich nicht .

also SendMessage hab ich mir jetzt angeschaut, man kann damit ja auch parameter übergeben, an ein anderes programm, kann man denn in dem Parameter zb ne strucktur unterbringen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.04.2005, 10:26 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Die IDE ist, grob gesagt, das Programm, in dem du deinen Quelltext eingibt (eben: Integrated Developement Environment), also in dienem Fall Delphi/Kylix/C++ Builder.

Die Socket-Komponenten gibt es in Delphi und co erst ab der Professional Edition, mit der Standard/Personal hast du da also das nachsehen, und InDy... naja, das ist halt die "visualisierung" von Sockets.

Bei SendMessage() und PostMessage() kannst du nur strings als Parameter übergeben. Diese können aber natürlich eine eigene interne Struktur haben, anhand derer das Empfänger-Programm diesen parsen kann!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.04.2005, 13:34 Uhr
~CDW
Gast


SendMessage() und PostMessage() kannst du nur strings als Parameter übergeben
[QUOTE]
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
[/QUOTE]
also ich sehe hier keinen String
HWND ist der Handle zum anderen Programm... muss man natürlich vorher rausbekommen.
Msg ist ein (32-bit) int, hier kann man auch eigene Messages übergeben (im Zielprogramm muss man diese natürlich in die Behandlungsroutine einfügen).
WPARAM auch 32-bit int, kann man auch als Zeiger missbrauchen und damit z.B einen Zeiger auf eine Structur übergeben.LPARAM auch. Aber ehrlich gesagt bezweifele ich dass es anständig funktionieren sollte - denn unter Win hat JEDES Programm 2 bis 3 GB an adressierbarem (virtuellen) Speicher. Wenn man also an das zweite Programm den Zeiger übergibt der z.B in dem einen Prozess auf 10000 zeigt, dann kopiert das zweite Programm aus dem EIGENEN Adressspace und das ist nicht gut .
Was man machen kann ist naürlich: WriteProcessMemory
mit/ohne VirtualAllocEx benutzen. Dafür muss man aber erst SeDebug Privilegien erlangen und das erfordert natürlich immer Adminrechte für das Programm. Außerdem muss man noch den Handle zum Prozess rauskriegen was für jemanden der nicht so viel mit WinAPI am hut hat nicht ganz einfach ist. Da sind wieder die Sockets einfacher


Zitat:
Die Socket-Komponenten gibt es in Delphi und co erst ab der Professional Edition, mit der Standard/Personal hast du da also das nachsehen,


Naja, wenn es sein muss kann man auch ohne Komponenten Sockets ansprechen.Ist etwas mehr tipparbeit.

PS: hab Delphi 5.0 Standard Edition. Habe da trotzdem Sockets, Indykomponenten gibs zudem im Netz.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.04.2005, 15:45 Uhr
Arthur Drakonis



hmm, ich werde es wohl erstmal mit dem shard memory probieren, habe bei msdn dazu nen quellcode gefunden.

das mit postmessage() hab ich auch hinbekommen, bzw fast, ich kann nur zahlen übergeben, weder string noch struktur, da der wParam type int und der lParam type long ist.

bin jetzt gerade dabei, den shared memory teil ins empfangsprogramm einzubinden und dann zu testen.
--
www.uo-even.com
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.04.2005, 17:18 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Stimmt, sorry, ich hatte das jetzt irgendwie als char* drauf

Naja, Sockets haben natürlich den Vorteil, dass sie relativ einfach handzuhaben sind, aber ich würde das trotzdem anders machen... ;-)

Und bei mir (BCB 4 Std. und BCB 6 Personal) sind keine Internet Komponenten dabei; InDy musste ich nachinstallieren (was aufgrund der Fehlenden DB im Std. / Personal nicht ganz einfach war), und die CppWebBrowser und .co musste ich manuell importieren... wie das bei Delphi ist, weiß ich nicht (!DOCH!: Bei Delphi1 gibt es die nicht ).

Was ansonsten auch ginge (aber wohl wirklich nur, wenn gar nichts anderes klappt) währe die Registry... aber gut, dass währe dann versteckt auch wieder eine Datei...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: