2015-07-10 9 views
9

Ich verwende Delphi XE8 und habe GetIt AsyncPro für VCL 1.0 installiert. Es funktioniert gut, wenn ich meine Anwendung für 32 Bit kompiliere, aber für 64 Bit fehlschlägt. Der Fehler ist:AsyncPro und 64bit

[dcc64 Error] OoMisc.pas(2771): E2065 Unsatisfied forward or external declaration: 'Trim' 

Wenn ich OoMisc.pas öffnen ist zu sehen:

{$IFNDEF Win32} 
function Trim(const S : string) : string; 
{$ENDIF} 

Die Trim Funktion nicht definiert zu sein scheint. Die Einheit hat SysUtils in ihrer Klausel uses.

Antwort

2

Ich wette, das ist ein Relikt aus Delphi 1, wenn Win32 verwendet wurde, um von Win16 zu unterscheiden. Sie können diese Zeilen sicher entfernen.

+0

Ich habe versucht, die Funktionsdefinition zu entfernen, aber dann bekam ich eine Reihe weiterer Fehler, die nicht zusammenhingen. Es muss etwas anderes sein. Kann jemand ASPRO mit einer 64-Bit-Anwendung kompilieren? –

6

AsyncPro unterstützt nur die Win32-Plattform. Es kann nicht wie es ist für Win64-Bit verwendet werden.

Es enthält viel 32-Bit Inline-ASM-Code, der entweder durch Pascal-Code ersetzt oder auf 64-Bit-ASM-Code portiert werden müsste. Neben diesem Teil könnte es andere Inkompatibilitäten mit Win64 Bit-Plattform geben.

Converting 32-bit Delphi Applications to 64-bit Windows - Inline Assembly Code

Wenn Ihre Anwendung Inline-Assembler (ASM) Code enthält, müssen Sie den ASM-Code untersuchen und folgende Änderungen vornehmen: Mischen von Assembler-Anweisungen mit Pascal-Code wird nicht in 64- unterstützt Bit Anwendungen. Ersetzen Sie Assemblyanweisungen entweder durch Pascal-Code oder Funktionen, die vollständig in Assembly geschrieben wurden.

Portierung Assembly-Code von IA-32 zu Intel 64 kann nicht einfach Kopieren des Codes getan werden. Berücksichtigen Sie die Architekturspezifikationen wie die Größe von Zeigern und Ausrichten. Sie können auch das Prozessorhandbuch für neue Anweisungen konsultieren. Wenn Sie denselben Code für verschiedene Architekturen kompilieren möchten, verwenden Sie bedingte Definitionen. Weitere Informationen finden Sie unter Verwenden von Bedingte Definitionen für plattformübergreifenden Code in "Verwenden der Inline-Baugruppe Code".

RAD Studio unterstützt Intel x86 über SSE4.2 und AMD 3dNow und x64 über Intel/AMD bis SSE4.2.

Using Inline Assembly Code


Update:

Es gibt Win64 Hafen von AsyncPro von Johan Bontes zur Verfügung gestellt:

Ich habe eine Version für Win64 auf meinem Github: https://github.com/JBontes/AsyncPro

Es kompiliert, aber ich war nicht in der Lage, es umfassend zu testen. Fühlen Sie sich frei, ein Problem zu melden, wenn Sie irgendwo stecken.

+0

Danke für den Vorsprung auf die 64-Bit-Version. Ich werde es versuchen –

2

Ich konvertierte AsyncPro zu XE8, aber es unterstützt nur Win32.

0

OoMisc.pas hatte eine Trim-Funktion, die aus dem Implementierungsteil entfernt wurde. Allerdings hat jemand vergessen, es aus dem Schnittstellenteil zu entfernen. Das hat für x32 nicht geschadet, weil es innerhalb von $ IFNDEF war. Win32 ist nicht für x64 definiert, so wird der Compiler beschweren. Die Lösung für dieses spezielle Problem besteht darin, die folgenden drei Zeilen zu löschen, die für Delphi 1.0 vorgesehen waren.

Natürlich macht AsyncPro nicht mit x64 kompatibel, da es andere Probleme geben wird.