Autor | Thema: Selber Bereiche generieren | | Datum:16.04.02 20:58 
(frankabbing@12move.de) | |
Hallo,
eine Frage, die sich wohl eher an Roland richtet:
Kann ich selber Bereiche erstellen und dimensionieren und diese dann als Profan-Bereiche deklarieren ?
So in etwa...
Declare bereich#,memory&
memory&=GlobalAlloc(...) 'Kernel32 API
bereich#=memory&
...
Dispose bereich#
End
Geht das, oder produziert das einen Fehler, welchen auch immer...
Ich denke, du benutzt ebenfalls GlobalAlloc() um die Bereiche zu erstellen.
Gruß, Frank
|
| | Datum:16.04.02 21:59 
(schmidts@flat2serv.de) | |
Hallo Frank,
Du meinst aber nicht "Dim Bereich#,65555"?
Sven
|
| | Datum:16.04.02 22:08 
| |
Lustig, Sven ;-))
Nein, es geht mir darum von einer externen Dll aus Speicher zu reservieren. Und den Speicher möchte ich dann im Profanprogramm unkompliziert einbinden. So spare ich mir, von Profan aus zwei Bereiche an eine Dll-Funktion zu senden, wenn die Funktion Manipulationen daran ausführt...
Ok ?
Gruß, Frank
|
| | Datum:16.04.02 22:13 
(schmidts@flat2serv.de) | |
Muss gehen. Du reservierst in Deiner DLL Speicher (PChar, z.B.), der gross genug ist. Dann übergibst Du den an Profan² (das Prog fragt danach) inkl. der Größe. Du reservierst von profan² aus einen bereich, sicherst die Adresse und setzt den Bereichs-Zeiger auf den übergebenen Bereich von der DLL. Anschliessend, nachdem Du fertig bist, setzt Du den Zeiger wieder auf den original-Bereich, damit Du ihn problemlos freigeben kannst.
Sven
|
| | Datum:17.04.02 16:44 
| |
Hallo Sven,
das war aber nicht meine Frage. Ich möchte es so machen wie in meinem Beispiel. Nur soll die Dll den Speicher reservieren (GlobalAlloc), und Profan soll ihn dann mit Dispose freigeben.
Roland ?
|
| | Datum:17.04.02 16:57 
(schmidts@flat2serv.de) | |
Hallo Frank,
wie soll das gehen? Ein Speicherbereich ist geschützt, Du kannst nicht den Bereich einer anderen Anwendung freigeben, wäre ja fatal.
Sven
|
| | Datum:17.04.02 20:14 
| |
Hallo Sven,
im Win32 wird dazu nichts erwähnt.
GlobalAlloc() ist ziemlich lowleveled und ich hab' nicht vor es mit GlobalLock() zu sichern...
Gruß, Frank
|
| | Datum:17.04.02 20:28 
(frankabbing@12move.de) | |
Hallo,
ok, hab's jetzt ausprobiert:
"Bereichsgrenze überschritten" wird gemeldet, sobald ich von Profan aus auf den Speicher zugreifen will...
Und wieder hat die Profan-Kindersicherung eine Idee zum scheitern gebracht 8-(
Gruß, Frank
|
| | Datum:17.04.02 20:30 
(schmidts@flat2serv.de) | |
Frank,
es geht vom logischen her nicht. Du kannst nicht Bereiche verkleinern / vergrößern, die fremden Programmen gehören. Das ist ein Grundprinzip vom Windows Speichermodell. Es wäre ja schlimm, wenn ein profan² Programm z.B. unerlaubterweise im Word Speicher rumschreibt. Du kannst höchstens Speicher in einer bestimmten Größe definieren, Profan² den Anfangszeiger geben (und die Größe) und dann kann Profan² darin rumschreiben, aber auch nur bedingt. Mehr ist echt nicht drin, habe auch schon geflucht.
Sven
|
| | Datum:17.04.02 20:37 
| |
Hi Sven,
mag ja alles sein, möglich ist es aber.
und um den Speicher freizugeben, benötige ist keine Größenangabe des Speichers. GlobalFree() wird nur der Handle zurückgegeben.
Aber egal, es scheitert ja eh an der profaneigenen Sicherung, schniff...
Gruß, Frank
|
| | Datum:17.04.02 22:04 
(rgh-soft@t-online.de) | |
Hallo Frank,
das was Du willst könnte gehen, aber damit die "PROFAN-Kindersicherung" ;-) nicht zuschlägt müßtest Du vor dem "Umbiegen" ein DIM entsprechender Größe machen. Etwa so:
Declare bereich#,memory&
Dim bereich#,640000
memory&=GlobalAlloc(...) 'Kernel32 API
bereich#=memory&
...
Dispose bereich#
End
ACHTUNG: In diesem Fall gibt das "Dispose bereich#" in der aktuellen PROFAN-Version nur den in PROFAN geDIMten Bereich wieder frei! Den mit der API erzeugten Bereich müßtest Du auch mit dem entsprechenden API-Befehl freigeben.
Bei älteren PROFAN-Versionen müßtest Du Dir vor dem "Umbiegen" die Adresse des Bereiches merken, etwa:
Declare bereich#,memory&,addrber&
Dim bereich#,640000
addrber&=bereich#
memory&=GlobalAlloc(...) 'Kernel32 API
bereich#=memory&
...
bereich#=addrber&
Dispose bereich#
End
Ich hoffe, das hilft Dir etwas weiter!
Gruß
Roland
|
| | Datum: 18.04.02 16:35 
| |
Danke Roland,
aber hat doch arg viele Nachteile.
Ich laß es lieber.
Gruß und Dank,
Frank
|
|
|