![]() |
nochmal Unterschied Delphi7 und Delphi XE5
Hallo,
ich habe ein Programm indem ich eine DLL (LUMAX) benutze. Am Anfang vom Programm lade ich die DLL und einige Funktionen. luhandle:=LoadLibrary(PChar(ExtractFilePath(ParamS tr(0))+'lumax.dll')); if (luhandle <> 0) then begin luhandle ist vom Typ THandle. Am Ende vom Programm gebe ich die DLL wieder frei try FreeLibrary(luhandle); except luhandle:=0; end; Wenn ich keine Funktion aufrufe läuft alles (in Delphi7 und Delphi XR5) ok. Sobald ich aber eine Funktion benutze bekomme ich in Delphi XE5 bei dem Befehl FreeLibrary folgende Fehlermeldung. (Bei Delphi7 nicht). Im Projekt ist eine Fehlermeldung der Klasse $C000005 mit der Meldung Zugriffsverletzung bei 0x042c2108: Lesen von Adresse 0x042c2108 aufgetreten. Hat jemand eine Ahnung was das ist und wie man den Fehler behebt? Danke und Gruß Jürgen |
AW: nochmal Unterschied Delphi7 und Delphi XE5
Zeig' mal (wenigstens) einen der Funktionsaufrufe, die zu 'nem Fehler führen.
Das Laden und Freigeben scheint ja nicht das Problem zu sein. |
AW: nochmal Unterschied Delphi7 und Delphi XE5
Was passiert dazwischen?
Ich schätze mal das deine Imports nicht sauber an Unicode angepasst sind, mangels Source Kann ich nicht mehr sagen. Wenn Du es nicht hier posten willst, kannst Du mir auch gerne per PN schicken, dann schau ich mal darüber |
AW: nochmal Unterschied Delphi7 und Delphi XE5
Die DLL beibt natürlich auch weiterhin ANSI, selbst wenn deine EXE nun "standardmäßig" Unicode verwendet.
Ebentuell mögliche Lösung: In deiner Schnittstellen-Unit alle PChar durch PAnsiChar ersetzen (Char, String usw. genauso) DMX-Controller? ![]() ![]() |
AW: nochmal Unterschied Delphi7 und Delphi XE5
folgende Funktionen rufe ich auf.
Delphi-Quellcode:
Ich hoffe das hilft.
//Deklaration:
type TLumax_OpenDevice = function(const l_devnumber, l_channel: integer): integer; stdcall; type TLumax_CloseDevice = function(const l_dev: integer): integer; stdcall; var Lumax_OpenDevice: TLumax_OpenDevice; var Lumax_CloseDevice: TLumax_CloseDevice; var ladr_opendev: TFarProc; var ladr_closedev: TFarProc; ladr_opendev:=GetProcAddress(luhandle, 'Lumax_OpenDevice'); if ladr_opendev <> nil then begin @Lumax_OpenDevice:=ladr_opendev; ladr_closedev:=GetProcAddress(luhandle, 'Lumax_CloseDevice'); if ladr_closedev <> nil then begin @Lumax_CloseDevice:=ladr_closedev; //Aufrufe: procedure TForm1.Laseropen_lumax; var idev: integer; begin ldevl1:=0; frams11:=0; ohe1:=0; if lxdevnr1 > 0 then begin idev:=Lumax_GetPhysicalDevices(); if idev > 0 then begin ldevl1:=Lumax_OpenDevice(lxdevnr1, 0); ohe1:=1; end; end; end; procedure TForm1.Laserclose_lumax; var s: integer; var z: integer; begin if lxdevnr1 > 0 then begin if frams11 = 1 then begin z:=Lumax_StopFrame(ldevl1); end; frams11:=0; if ldevl1 > 0 then begin s:=Lumax_CloseDevice(ldevl1); ldevl1:=0; ohe1:=0; end; end; end; Gruß Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz