Zwei Programme - ein Speicher

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Zwei Programme - ein Speicher

Beitrag 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?
Bild
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Mit DDE kann man sowas.

Wen du mich fragst, wie das funzt, fragst du mich was zu viel.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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... :lol:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Beitrag 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 :D

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
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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)
Zuletzt geändert von edel am 30.12.2006 00:39, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Oder PBOSL_GlobalSharedmemory, ist ja extra für sowas geschaffen. Oder den Source der Lib verwenden, ist nicht viel.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Beitrag 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???
Bild
Antworten