Bankadresse für "C" finden. [gelöst mit Pointer]

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

funkheld

Betreff: Bankadresse für "C" finden. [gelöst mit Pointer]

BeitragDi, Aug 23, 2016 9:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, guten Tag.

Wie kann ich hier raus bitte :
Code: [AUSKLAPPEN]

Graphics 600,400

global z:int

Global bild:TImage=CreateImage(70,40)
global Pix:TPixmap=LockImage(bild)
global Adresse:byte Ptr = Pix.PixelPtr(0,0)
global MyBank:TBank=CreateStaticBank (Adresse,12000)

Repeat
   Cls

  for z=0 to 11200 step 4
    MyBank.Pokeint z,$ff00ff00
  next

  setcolor 255,255,255
  DrawImage bild,100,100

    Flip
Until KeyHit (KEY_ESCAPE)


die Bankadresse bekommen , damit ich in "C" beschreiben und lesen kann?

Mit diesém Hilfetext kann ich nichts anfangen:
Zitat:

Buf :
Method Buf:Byte Ptr()
Description: Get a bank's memory pointer
Returns: A byte pointer to the memory block controlled by the bank
Information: Please use Lock and Unlock instead of this method.


Danke.
GRuss
  • Zuletzt bearbeitet von funkheld am Mi, Aug 24, 2016 17:28, insgesamt 4-mal bearbeitet

FireballFlame

BeitragDi, Aug 23, 2016 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das, was du da zitierst, ist aber die Antwort auf deine Frage. Mit .Buf oder mit .Lock bekommst du den Pointer, den du suchst; nach letzterem solltest du dann irgendwann auch wieder .Unlock aufrufen.
Abgesehen davon, dass ich den Sinn von Banks allgemein zweifelhaft finde (mann kann ja auch einfach direkt mit dem Speicherblock arbeiten), ist mir aber nicht klar, wozu du das überhaupt brauchst. Du hast doch deine Adresse anscheinend schon und benutzt sie, um die Bank zu erstellen. Wozu willst du sie dann nochmal aus der Bank abfragen?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

funkheld

BeitragDi, Aug 23, 2016 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Möchte die Adresse in einem "C-Code" verwenden zum ausprobieren.
In BlitzMax kann man ja auch mit "C" von MingW rumspielen.
Habe schon kleine C-Programme geschrieben mit BlitzMax laufen.

Da fehlt mir jetzt irgendwie...etwas...ich weiß nicht wie ich die übernehmen kann.

Zitat:

mann kann ja auch einfach direkt mit dem Speicherblock arbeiten


Erkär das bitte einmal, wie ich auf das Image hier direkt zugreifen kann mit einem Pointer(Adresse) die ich auch in "C" benutzne kann ?
--------------------------------------------------
global Pix:TPixmap=LockImage(bild)
--------------------------------------------------
Danke.
Gruss

FireballFlame

Betreff: Re: Bankadresse für "C" raus finden...

BeitragDi, Aug 23, 2016 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Nochmals: du hast deinen Pointer schon.
funkheld hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
global Adresse:byte Ptr = Pix.PixelPtr(0,0)

Du benutzt ihn ja danach sogar zum Erstellen deiner Bank.
Den Pointer kannst du aber auch gleich direkt benutzen, um auf deine Pixmap-Daten zuzugreifen, entweder in BlitzMax selbst oder indem du ihn als Parameter an eine in C geschriebene Funktion übergibst. Wie sowas geht, kannst du in der BlitzMax-Hilfe unter "Language/Advanced Topics/Pointers" und "Language/Advanced Topics/Interfacing with C" nachlesen, oder auch hier.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

funkheld

BeitragDi, Aug 23, 2016 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm...
Wenn ich die Adresse Printen möchte mit :

global pixstring:string
print pixstring.Fromint(adresse)

Kommt : Unable to convert from Byteptr to Int

Ich komm hier jetzt nicht weiter.

Gruss

FireballFlame

BeitragDi, Aug 23, 2016 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Musst ihn explizit nach Int casten.
Code: [AUSKLAPPEN]
Print Int(adresse)
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

funkheld

BeitragDi, Aug 23, 2016 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah...danke.
Das war es.

Vielen dank.

Gruss
 

funkheld

BeitragDi, Aug 23, 2016 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Es klappt jetzt auch mit dem Pointer in "C" .

Danke.
Gruss

Code: [AUSKLAPPEN]

Import "c_pixel1.c"

Graphics 600,400

global z:int

Global bild:TImage=CreateImage(70,40)
global Pix:TPixmap=LockImage(bild)
global Adresse:byte Ptr = Pix.PixelPtr(0,0)

Extern
    Function pixel(Adresse:byte Ptr)
End Extern

Repeat
  Cls

  pixel(adresse)

  setcolor 255,255,255
  DrawImage bild,100,100
  Flip
Until KeyHit (KEY_ESCAPE)



So sieht der vereinfachte "C-Code" aus, der jetzt funktioniert, Jede Adresse ist ein Pixel.
Code: [AUSKLAPPEN]

void pixel(int *adresse)

   adresse[0]=0xff00ffff;
   adresse[1]=0xff00ffff;
   adresse[2]=0xff00ffff;
   adresse[3]=0xff00ffff;
   adresse[4]=0xff00ffff;
   adresse[5]=0xff00ffff;
   adresse[6]=0xff00ffff;
   adresse[7]=0xff00ffff;
   adresse[8]=0xff00ffff;
   adresse[9]=0xff00ffff;
   adresse[10]=0xff00ffff;
   adresse[11]=0xff00ffff;
}
  • Zuletzt bearbeitet von funkheld am Do, Aug 25, 2016 8:55, insgesamt 6-mal bearbeitet

BladeRunner

Moderator

BeitragMi, Aug 24, 2016 9:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Was man absperrt muss man auch wieder aufschliessen...
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

BeitragMi, Aug 24, 2016 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann jetzt von BlitzMax Farbe, Größe usw übergeben....

Danke.
Gruss

Code: [AUSKLAPPEN]

int b;

void pixel(int *adresse, int f, int z)

  for(b=0; b<z; b++)
  {
     adresse[b]=f;
  }
}



Zitat:

Was man absperrt muss man auch wieder aufschliessen...


Da gebe ich dir recht.

Danke.
Gruss

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group