Filemapping funktioniert jetzt in einem Gui-Fenster
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
funkheldBetreff: Filemapping funktioniert jetzt in einem Gui-Fenster |
Fr, Aug 19, 2016 15:47 Antworten mit Zitat |
|
---|---|---|
Hallo, mit Filemapping kann man von einem Exe-Programm Daten übertragen zu einem anderen Exe-Programm.
http://www.blitzbasic.com/Comm...opic=65705 hier funktioniert es ganz einfach über das Window-Eingabefenster , welches als Ergebnis einen statischen Wert übergibt. Ich habe es abgeändert und mit "Build Gui" compiliert". Ein Wert wird vom Freebasicprogramm laufend übertragen und vom BlitzMax-Programm laufend empfangen. Und ein Wert wird vom BlitzMax-Programm laufend übertragen und vom BlitzMax-Programm laufend empfangen. Zuerst das Empfangsprogramm starten dann das Sendeprogramm starten. Viel spass... Gruss FreeBasic--Filemapping-Sende-Integer : Code: [AUSKLAPPEN] #Include "windows.bi" #Include "fbgfx.bi" #include "vbcompat.bi" Using FB Dim as HANDLE hMap Dim Shared As Integer zahl Dim AS Integer PTR buffer buffer = ALLOCATE( 1000 ) screenres 320,200,32,1,4 WindowTitle "filemap-send" ScreenControl SET_WINDOW_POS, 50, 40 hMap = CreateFileMapping( cast(HANDLE,INVALID_HANDLE_VALUE), _ null, _ PAGE_READWRITE, _ 0, _ 1000, _ "MyFileMapping" ) buffer = MapViewOfFile( hMap, _ FILE_MAP_ALL_ACCESS, _ 0, _ 0, _ 0 ) Do zahl=zahl+100 If zahl > 5000 Then zahl=0 EndIf buffer[0] =zahl Locate 3,1,1 print "sende integerwert :";buffer[0] Sleep 300 loop until inkey = chr(27) BlitzMax--Filemapping-Sende-Integer: Code: [AUSKLAPPEN] SuperStrict Graphics 300,200 Global timer:TTimer = CreateTimer(60) global wert:int Extern "Win32" Function CloseHandle:Int(Handle:Int) Function MapViewOfFile:int Ptr(hFileMappingObject: Int,dwDesiredAccess: Int, dwFileOffsetHigh:Int, dwFileOffsetLow:Int, dwNumberOfBytesToMap:Int) Function UnmapViewOfFile:Int(lpBaseAddress: Byte Ptr) Function CreateFileMappingA:Int(hFile: Int, lpFileMappingAttributes: Byte Ptr,flProtect:Int, dwMaximumSizeHigh:Int, dwMaximumSizeLow:Int, lpName$z) Function GetLastError:Int() End Extern Const PAGE_READWRITE : Int=4 Const FILE_MAP_WRITE : Int=2 Type TSharedMemory Field _Handle : Int Field _Name : String Field _Size : Int Field _Owner : Int Field _Data : Byte Ptr Method Delete() Close End Method Method Open:Int(Name: String, Size: Int) Close() _Name = Name _Size = Size ' CreateFileMapping, when called with $FFFFFFFF For the hanlde value, creates a region of shared memory } _Handle = CreateFileMappingA($FFFFFFFF, Null, PAGE_READWRITE, 0,_Size,_Name) If _Handle = 0 Then Return False _Owner = GetLastError() = 0 ' We still need To map a pointer To the handle of the shared memory region _Data= MapViewOfFile(_Handle, FILE_MAP_WRITE, 0, 0, _Size) If Not _Data Close Return False End If Return True End Method Method Close() If _Data UnmapViewOfFile(_Data); _Data=Null End If If _Handle CloseHandle(_Handle) _Handle=0 End If End Method End Type Local mem:TSharedMemory = New TSharedMemory mem.Open("MyFileMapping",30) Repeat cls delay(300) wert=wert+100 if wert > 20000 then wert=0 drawtext "sende integerwert : "+ wert,10,10 MemClear mem._Data,30 Local pTitle:Byte Ptr=varptr wert MemCopy mem._Data,pTitle,4 MemFree pTitle Flip WaitTimer(timer) Until KeyHit (KEY_ESCAPE) mem.Close end BlitzMax--Filemapping-Empfange-Integer: Code: [AUSKLAPPEN] SuperStrict Graphics 300,200 Global timer:TTimer = CreateTimer(60) global wert:int global text:string Extern "Win32" Function CloseHandle:Int(Handle:Int) Function MapViewOfFile:int Ptr(hFileMappingObject: Int,dwDesiredAccess: Int, dwFileOffsetHigh:Int, dwFileOffsetLow:Int, dwNumberOfBytesToMap:Int) Function UnmapViewOfFile:Int(lpBaseAddress: Byte Ptr) Function CreateFileMappingA:Int(hFile: Int, lpFileMappingAttributes: Byte Ptr,flProtect:Int, dwMaximumSizeHigh:Int, dwMaximumSizeLow:Int, lpName$z) Function GetLastError:Int() End Extern Const PAGE_READWRITE : Int=4 Const FILE_MAP_WRITE : Int=2 Type TSharedMemory Field _Handle : Int Field _Name : String Field _Size : Int Field _Owner : Int Field _Data : int Ptr Method Delete() Close End Method Method Open:Int(Name: String, Size: Int) Close() _Name = Name _Size = Size ' CreateFileMapping, when called with $FFFFFFFF For the hanlde value, creates a region of shared memory } _Handle = CreateFileMappingA($FFFFFFFF, Null, PAGE_READWRITE, 0,_Size,_Name) If _Handle = 0 Then Return False _Owner = GetLastError() = 0 ' We still need To map a pointer To the handle of the shared memory region _Data= MapViewOfFile(_Handle, FILE_MAP_WRITE, 0, 0, _Size) If Not _Data Close Return False End If Return True End Method Method Close() If _Data UnmapViewOfFile(_Data); _Data=Null End If If _Handle CloseHandle(_Handle) _Handle=0 End If End Method End Type Local mem:TSharedMemory = New TSharedMemory mem.Open("MyFileMapping",30) Repeat cls If mem._Owner wert = mem._Data[0] drawtext "empfange integerwert : "+wert,10,10 End If Flip WaitTimer(timer) Until KeyHit (KEY_ESCAPE) mem.Close end |
||
- Zuletzt bearbeitet von funkheld am Sa, Aug 20, 2016 10:58, insgesamt 6-mal bearbeitet
BladeRunnerModerator |
Fr, Aug 19, 2016 19:40 Antworten mit Zitat |
|
---|---|---|
Sorry, aber das fällt unter "mit fremden Federn schmücken".
Du hast nichts anderes getan als den beigefügten Test des Programms zu ändern - noch dazu eher mäßig, da Du zB die Shared Ram Größe unverändert übernommen hast obwohl diesmal kein String sondern ein Integer übertragen wurde, was zeigt dass Du dich nur sehr begrenzt damit befasst hast. Das ist das Werk eines anderen, nicht deins, und das ist wirklich kein guter Stil. Da Du die Quelle nennst und der Code als solches sinnvoll ist werde ich ihn dieses Mal so stehen lassen. Sollte es weitere Fälle dieser Art geben werde ich das nicht wieder tolerieren - Das Codearchiv ist kein Copy&Paste-Spielplatz. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
funkheld |
Sa, Aug 20, 2016 9:50 Antworten mit Zitat |
|
---|---|---|
Ist geändert.
Integer wird gesendet mit einem FreeBasicprogramm und auch Integer wird gesendet vom BlitzMaxProgramm. Empfangen wird auch mit einem BlitzMaxProgramm Gruss |
||
BladeRunnerModerator |
Sa, Aug 20, 2016 13:25 Antworten mit Zitat |
|
---|---|---|
Stopp!
Du verschlimmbesserst das hier immer weiter. Wo es am Anfang ein Code war, der funktioniert hat (auch wenn Du das Beispiel suboptimal umgestaltet hast, was immer noch der Fall ist) bist du mittlerweile bei drei Codes, wovon: - einer nicht in BMax ist (hier ist das BMax Codearchiv) - zwei bis auf das geänderte Beispiel identisch sind (und einer davon alles könnte, da da immer noch _owner abgefragt wird). Damit zeigst Du mir dass Du weiter am experimentieren bist. DAFÜR ist das Codearchiv NICHT gedacht, wenn man hier was einstellt sollte man ein fertiges Stück Code haben. Ich mach jetzt hier dicht, und bis sich das eingespielt hat gilt für dich: Keine Codes in's Codearchiv ohne vorherige Prüfung durch einen der Moderatoren. Du kannst also bei Bedarf gern einem der Moderatoren eine PM zukommen lassen. ~GESCHLOSSEN~ |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
Powered by phpBB © 2001 - 2006, phpBB Group