Hallo,
vielen dank für die Antworten.
Letzendlich ist meine Ursprungsfrage aber wohl zu verneinen.
Vielleicht noch zur Erklärung: ich stehe noch VOR der Entscheidung welchen Compiler ich nehme. Daher suche ich zunächst auch mal den, der meine Anforderungen möglichst gut abdeckt.
Das man bei jedem Compiler auch durch Drumherumarbeiten fehlendes ersetzen kann, bzw. nachbilden kann, ist mir nat. klar. So könnte ich den Dateizugriff z.B. über eine DLL realisieren, dann können soviele gleichzeitig schreibend zugreifen wie sie wollen.
Gruss
hja
[/quote][/code]
Datei shared öffnen
Geht schon, eine Datei shared zu öffnen. Dazu musst Du allerdings ein wenig WIN-API bemühen.
Über eine registrierte Message kannst Du dann auch die Position und Anzahl der Bytes in der Datei übermitteln,
an der eine Änderung eintrat, und dann darauf reagieren.
Versteht sich von selbst, dass das nur mit Deinen Programmen funktionieren kann !
Zum Testen hier mal 2 Programme die zur selben Zeit auf eine Textdatei zugreifen können.
Programm 1:
Programm 2:
Über eine registrierte Message kannst Du dann auch die Position und Anzahl der Bytes in der Datei übermitteln,
an der eine Änderung eintrat, und dann darauf reagieren.
Versteht sich von selbst, dass das nur mit Deinen Programmen funktionieren kann !
Zum Testen hier mal 2 Programme die zur selben Zeit auf eine Textdatei zugreifen können.
Programm 1:
Code: Alles auswählen
Global message.l
Procedure WCB(wnd,msg,wparam,lparam)
Result = #PB_ProcessPureBasicEvents
Select Msg
Case message
Debug "geändert"
Debug "Position : "+Str(wparam)
Debug "Bytes : "+Str(lparam)
EndSelect
ProcedureReturn Result
EndProcedure
hFile.l = CreateFile_("Test.txt", #GENERIC_READ|#GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE, 0,#OPEN_ALWAYS,#FILE_FLAG_OVERLAPPED,0)
If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10,10,80,24,"OK")
EndIf
SetWindowCallback(@WCB())
Message = RegisterWindowMessage_("aha")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
ol.OVERLAPPED
ol\Offset = 0
WriteFile_(hFile,@"Shared1",7,@bw.l,ol)
SendMessage_(#HWND_BROADCAST,Message,0,7)
EndSelect
Case #PB_Event_CloseWindow
CloseHandle_(hFile)
Quit = 1
EndSelect
Until Quit = 1
EndIf
End
Code: Alles auswählen
Global message.l
Procedure WCB(wnd,msg,wparam,lparam)
Result = #PB_ProcessPureBasicEvents
Select Msg
Case message
Debug "geändert"
Debug "Position : "+Str(wparam)
Debug "Bytes : "+Str(lparam)
EndSelect
ProcedureReturn Result
EndProcedure
hFile.l = CreateFile_("Test.txt", #GENERIC_READ|#GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE, 0,#OPEN_ALWAYS,#FILE_FLAG_OVERLAPPED,0)
If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10,10,80,24,"OK")
EndIf
SetWindowCallback(@WCB())
Message = RegisterWindowMessage_("aha")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
ol.OVERLAPPED
ol\Offset = 12
WriteFile_(hFile,@"Shared2",7,@bw.l,ol)
SendMessage_(#HWND_BROADCAST,Message,12,7)
EndSelect
Case #PB_Event_CloseWindow
CloseHandle_(hFile)
Quit = 1
EndSelect
Until Quit = 1
EndIf
End
Gruss Andreas
Was soll an Write Share kompliziert sein? Vieleicht gehts in dem Artikel noch um mehr. Man muss als Sharemode beim Öffnen lediglich FILE_SHARE_READ|FILE_SHARE_WRITE angeben. Wie im Source hier nachzulesen.Scarabol hat geschrieben: Ist aber relativ kompliziert -> Wer suchet der findet...
Ich sags immer wieder gerne, solcherart Informationen findet man in der MSDN
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Hallo,
Andreas, vielen Dank für Deine Mühe. Aber es ging mir wirklich nur darum herauszufinden, ob Purebasic das von Hause aus kann. Ich möchte soweit eben möglich alles ohne fremde Aufrufe erstellen. Da ich bisher nie einen Compiler nutzte der das nicht von Hause aus unterstützte, war ich halt überrascht und stellte daher die Frage.
Ohne Fremdaufrufe bleiben die Programme halt am flexibelsten. Normal ist nur die Syntax eine etwas andere. Früher nutze ich z.B. ein Programm um den Source von CP/M nach PC anzupassen, oder von einer Compilerversion zur nächsten. Das klappt halt alles nur, wenn nur die Syntax geändert werden muss.
Nochmals danke
Gruss
hja
Andreas, vielen Dank für Deine Mühe. Aber es ging mir wirklich nur darum herauszufinden, ob Purebasic das von Hause aus kann. Ich möchte soweit eben möglich alles ohne fremde Aufrufe erstellen. Da ich bisher nie einen Compiler nutzte der das nicht von Hause aus unterstützte, war ich halt überrascht und stellte daher die Frage.
Ohne Fremdaufrufe bleiben die Programme halt am flexibelsten. Normal ist nur die Syntax eine etwas andere. Früher nutze ich z.B. ein Programm um den Source von CP/M nach PC anzupassen, oder von einer Compilerversion zur nächsten. Das klappt halt alles nur, wenn nur die Syntax geändert werden muss.
Nochmals danke
Gruss
hja