Ich wollte fragen, ob es mit Lazarus möglich ist, eine DLL zu erstellen, welche über die WinAPI VirtualAlloc (oder ähnlichem) Speicher reserviert und den reservierten
Speicher als Pointer an den Aufrufer zurückgibt. Und wie müsste so eine DLL aussehen?
Mein Problem:
Ich habe eine große Anwendung (Sybase Powerbuilder und nicht mit Lazarus erstellt), welche beim Programmstart 100MB Speicher verbraucht,
nun muss ich eine große Datei ca. 70 bis 200 MB in den Speicher lesen und habe das Problem, dass ich den Speicher nicht in der Größe
reservieren kann, da scheinbar das Speichermanagment in der von mir eingesetzten Programmierumgebung das nicht vorsieht. Meine Idee
ist nun, dass ich über die WinAPI den Speicher reserviere und praktisch an meine Variable übergebe. Um dieses zu machen, benötige ich
allerdings eine DLL, welche ich meine Variable als Referenz übergeben kann, damit diese den Pointer umsetzen kann, da meine Programmierumgebung
von Haus aus nicht direkt mit Pointern umgehen kann, ich aber in der Lage bin an externen Funktionen Variablen als Referenz zu übergeben.
Ich würde dann gedanklich folgendes mit der DLL in meiner Anwendung machen wollen:
Code: Alles auswählen
BLOB lbl_data // Variable deklarieren.
MessageBox("Größe der Variable", len ( lbl_data )) // Hier sollte jetzt 0 rauskommen.
SetVirtualMemory (ref lbl_data, 100) // Aufruf der DLL Funktion mit der Angabe wie viel Speicher ich haben möchte.
MessageBox("Größe der Variable", len ( lbl_data )) // Hier sollte jetzt ca 104857600 rauskommen.
FreeVirtualMemory(ref lbl_data) // Hier sollte der verwendete Speicher wieder freigeben werden.
Ich hoffe ich konnte mein Problem und mein Vorhaben verständlich erläutern und mit ein bißchen Glück kann mir ja jemand
bei der Erstellung so einer DLL helfen.
Grüße
Alex