Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 243036 (4472)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Selber Bereiche generieren
Frank Abbing
| 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
Sven Schmidts
| Datum:16.04.02 21:59 (schmidts@flat2serv.de) |
Hallo Frank, Du meinst aber nicht "Dim Bereich#,65555"? Sven
Frank Abbing
| 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
Sven Schmidts
| 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
Frank Abbing
| 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 ?
Sven Schmidts
| 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
Frank Abbing
| 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
Frank Abbing
| 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
Sven Schmidts
| 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
Frank Abbing
| 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
Roland G. Hülsmann
| 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
Frank Abbing
| Datum: 18.04.02 16:35 |
Danke Roland, aber hat doch arg viele Nachteile. Ich laß es lieber. Gruß und Dank, Frank

| Zurück zur Übersicht