2016-07-19 12 views
-4

Hintergrund: Ich schreibe ein 2-Wege-Installationssystem (Verpackung der Installationsdatei/und entpacken und installieren der Installationsdatei) Ich benutze BDiff und BPatch (https://github.com/delphidabbler/bdiff). I integriert, um den Diff-Code in meine Anwendung, so kann ich Fortschritte anzuzeigen ...Delphi: Ich brauche neues Wissen (es gibt altes Wissen) auf, wie man meine Win32 App 4 GB Speicher auf 64bit Windows

Die Einschränkungen: 32bit ... Delphi 10.1 Berlin, meine 7-Zip-Lösung und meine crc Lösung braucht beide 32-Bit-ausführbar.

Das Problem: Speicher. Ich werde normalerweise 5 Diffe von etwa 40-50Mb je diff differieren (der Diff, erfordert jedoch viel mehr Speicher als 2 * Dateigröße), mein Threadpool funktioniert nur mit 3 Threads aktiv, sonst bekomme ich out-of-memory Fehler, das passiert ~ Runde 1,5 GB RAM verwendet

Die Ressourcen, die alle versprechen Lösung, konnte aber keine

How can I enable my 32-bit Delphi application to use 4gb of memory on 64-bit windows (via Wow64.exe)?

http://cc.embarcadero.com/item/24309

Using IMAGE_FILE_LARGE_ADDRESS_AWARE 32bit - 64bit

an die Arbeit

http://docwiki.embarcadero.com/RADStudio/Seattle/en/PE_(portable_executable)_header_flags_(Delphi)

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Linking

Mein Compiler nicht erkennt

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} 

ich [DCC32 Error] MaitreD.dpr (45): E2003 nicht deklarierter Bezeichner: 'IMAGE_FILE_LARGE_ADDRESS_AWARE'

Aber was noch beunruhigender ist, ist http://cc.embarcadero.com/item/24309 hat ein D2009 Beispiel, das Sie herunterladen können, und das, mit dem gleichen

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} 

kompiliert mit dem gleichen RAD Studio, so dass ich dachte, es irgendeine Einstellung ist, dass es Standard geändert hatte und dass das Beispiel Delphi-Projekt (wobei der Linker-Richtlinie arbeitet), haben andere als diese Standardeinstellungen;

Schließlich ist die eigentliche Frage Wie in Delphi 10.1 Berlin, ich meine 32-Bit-app voll, 4gb, die Verwendung von Speichern geben (Ich brauche weniger als das, aber mehr als die normalerweise begrenzte Menge)?

+0

würden die anonymen downvoters erklären? Ich bemühe mich sehr, die Frage so klar wie möglich zu formulieren, oder nimmst du eine Absage, weil ich dumm bin? Jeder könnte diese Einheit vermissen – chillum

+0

Meine Vermutung ist, dass die Down-Stimmen sind, weil die Mehrheit der Beiträge, die Sie verknüpfen, um die Lösung zu erklären. Es lohnt sich, Fehlermeldungen genau zu lesen und zu lernen, sie zu verstehen. Dieser ist ziemlich klar. Die Konstante ist nicht definiert. Die nächste Frage ist, wo sie definiert ist. –

+0

Ich wusste nicht, dass Compiler/Linker-Direktiven in einer Datei enthalten sind, die du in deine uses-Klausel aufnehmen kannst. Für mich war offensichtlich, dass meine Einstellungen meiner Umgebung irgendwie geändert werden mussten (weil Compiler/Linker im eigentlichen RAD-Studio verwendet wird) (also nach/new/knowledge fragen), nicht nur eine andere Datei einschließen – chillum

Antwort

5

Um dieses Flag zu verwenden, müssen Sie Winapi.Windows in Ihre uses-Klausel einfügen, da hier das Flag deklariert ist.

+0

funktioniert jetzt perfekt, vielen Dank @Rudy – chillum