Filemapping funktioniert jetzt in einem Gui-Fenster

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

funkheld

Betreff: Filemapping funktioniert jetzt in einem Gui-Fenster

BeitragFr, Aug 19, 2016 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BladeRunner

Moderator

BeitragFr, Aug 19, 2016 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Aug 20, 2016 9:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist geändert.
Integer wird gesendet mit einem FreeBasicprogramm und auch Integer wird gesendet vom BlitzMaxProgramm.
Empfangen wird auch mit einem BlitzMaxProgramm

Gruss

BladeRunner

Moderator

BeitragSa, Aug 20, 2016 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group