Seite 1 von 2
Zwei Programme - ein Speicher
Verfasst: 29.12.2006 21:06
von DarkSoul
Hallo allesam!
ich habe zwei programme geschrieben und ich möchte, dass beide auf ein und denselben Speicherbereich zugreifen. Es geht darum, text Informationen von ab nach b zu kriegen. geht das und wenn ja, wie?
Verfasst: 29.12.2006 21:26
von Leonhard
Mit DDE kann man sowas.
Wen du mich fragst, wie das funzt, fragst du mich was zu viel.
Verfasst: 29.12.2006 22:15
von Fluid Byte
Guckt dir mal im Platform SDK die Speicher Referenz an. Soweit ich weiss kann man einen globalen Speicher Block erstellen der von jedem Programm benutzt werden kann.
Du kannst aber auch, wie Leonhard erwähnte, DDE benutzen und den Pointer zum Speicher Block zwischen den Progammen hin und her senden um gemeinsam auf ihn zuzugreifen.
Verfasst: 29.12.2006 22:23
von AND51
> Es geht darum, text Informationen von ab nach b zu kriegen
Dazu gibt es schon viele andere Threads.
Die "bekanntesten" Ideen:
- Network-Befehle (Verbindung zum eigenen COmputer (127.0.0.1))
- Über Dateien
- DDE
- Zwischenablage (Clipboard)
- ProgramParameter()
- Envirenment-Variablen (siehe Process-Lib)
Wobei ich persönlich 1+3 bevorzuge, von 3 aber keine Ahnung habe...

Verfasst: 29.12.2006 22:42
von DarkSoul
nee, es geht darum, dass ich jett geradse meinen wichtiaplayer (hatt ich mal inner laberecke angesprochen) weiterbaue (die aktion mit den geisterfenster war, damit der klein-modus nicht son riesen platz in der leiste wegnimmt. das ist nämlich wie n riesen blumentopf für nen butterstecker
Ich will einfach nur, dass wenn ich eine mp3 anklicke, nicht nochmal ein ganzer wichtiaplayer geladen wird, sondern der dateiname (auch mehrere dateien!!!) an die bereits geöffnete version übergeben werden soll, da a) der player nur einmal laufen darf und b) das ein ziemliches gewusel geben wurde, vor allem lädt er zulange!) ich probiere mal die datei-lösung aus! wenns schief geht, melde ich mich wieder
thx
Verfasst: 30.12.2006 00:23
von edel
Ganz Simpel : Mutex + Sendmessage - Rest ueber Sufu.
Edit: 2 x starten
Code: Alles auswählen
#WM_MYOPENMESSAGE = #WM_USER + 1
Mutex = CreateMutex_(#Null,0,"MeinTollerPlayer")
If GetLastError_() = #ERROR_ALREADY_EXISTS
MessageRequester("","schon offen")
hwnd = FindWindow_(#Null,"player")
If hwnd
SendMessage_(hwnd,#WM_MYOPENMESSAGE,"MSG","MSG2")
EndIf
End
EndIf
Procedure Callback(h,m,w,l)
If m = #WM_MYOPENMESSAGE
MessageRequester(PeekS(w),PeekS(l))
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
hwnd = OpenWindow(0,0,0,300,300,"player")
SetWindowCallback(@Callback(),0)
Repeat
event = WaitWindowEvent()
Until event = #WM_CLOSE
CloseHandle_(Mutex)
Verfasst: 30.12.2006 00:33
von ts-soft
Oder PBOSL_GlobalSharedmemory, ist ja extra für sowas geschaffen. Oder den Source der Lib verwenden, ist nicht viel.
Verfasst: 30.12.2006 06:10
von Kaeru Gaman
öhm... ganzganzganz simpel:
zwei threads derselben prozessstruktur öffnen die beiden fenster....
ok, wenn dein erstprozess ein fremdprozess ist, den du nicht einfach
zu einem zusätzlichen thread veranlassen kannst, geht das nicht....
Verfasst: 30.12.2006 06:33
von ts-soft
Code: Alles auswählen
Procedure AllocateMemoryGlobal(Name.s,Size.l)
Shared HandleMap.l
HandleMap.l = CreateFileMapping_($FFFFFFFF, 0, 402653188, 0, Size, @Name)
If HandleMap
ProcedureReturn MapViewOfFile_(HandleMap, 983071, 0, 0 ,0)
EndIf
EndProcedure
Procedure FreeMemoryGlobal(MemoryAddress.l)
Shared HandleMap.l
UnmapViewOfFile_(MemoryAddress)
CloseHandle_(HandleMap)
EndProcedure
weitere Infos:
http://www.purebasic.fr/german/viewtopi ... y&start=10
Verfasst: 30.12.2006 12:12
von DarkSoul
TS-Soft: Kann ich mit deinen Befehlen jetzt einen Speicher anlegen, die Addresse dazu zum anderen Prozess 'durchschleifen' (callback..und sendmessage... die schleife ist schon ziemlich am anfang der produktion eingebaut worden, damit ein zweitstart abgeblockt wird und der erste task aktiviert wird.), sodass ich beide programee drauf loslassen kann, ohne dass windows quängelt???