![]() |
Projekt von Delphi 2007 auf Delphi 2010 umstellen
Hallo zusammen
Ich brauche die Unit JwaWinType. Beim Kompilieren erhalte ich folgende Meldung: Inkompatible Typen Char und AnsiChar. Wie muss ich den Code anpassen, dass es für Delphi 2010 stimmt? (ist im unteren code entsprechend markiert) Vielen Dank für Eure Info! Grüsse Jerry
Delphi-Quellcode:
procedure GetProcedureAddress(var P: Pointer; const ModuleName, ProcName: string);
var ModuleHandle: HMODULE; begin if not Assigned(P) then begin ModuleHandle := GetModuleHandle(PChar(ModuleName)); if ModuleHandle = 0 then begin ModuleHandle := LoadLibrary(PChar(ModuleName)); if ModuleHandle = 0 then raise EJwaLoadLibraryError.CreateFmt(RsELibraryNotFound, [ModuleName]); end; P := Pointer(GetProcAddress(ModuleHandle, PChar(ProcName))); // hier ist die Fehlermeldung !!!! if not Assigned(P) then raise EJwaGetProcAddressError.CreateFmt(RsEFunctionNotFound, [ModuleName, ProcName]); end; end; |
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Diese JWA (JediWindowsApi) ist uralt und nicht mehr für eine Verwendung vorgesehn ... steig mal auf was Neueres um, da es darin auch ein paar kleinere Unicode-Problemchen gibt und es somit unter D2009+ etwas rumzickt.
![]() Ich selber nutzte derartige Codes auch nur noch für Testzwecke und zum Abgucken von API-Headern ... aber von eine richtigen Einsatz dieser Codes rate ich eher ab. |
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Hallo himitus
ja da hast du recht... Sie ist wirklich alt. Ich brauche die Unit um RDC-direkt per Mausklick zu starten. Ich habe mir "nur" das nötigste aus dem JediWindowsAPI gezogen. Vielleicht reicht ja eine kleine Anpassung und ich kann das "alte" trotzdem gut verwenden? |
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Wie schaut die Signatur der Funktion "GetProcAddress" aus?
Ich tipp mal darauf das die ein PAnsiChar benötigt. |
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Hallo Bernhard
Hier die geforderte Information: function GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; external kernel32 name 'GetProcAddress'; Kannst Du was damit anfangen? Ich habe den Code in der Zwischenzeit folgendermassen geändert: P := Pointer(GetProcAddress(ModuleHandle, PAnsiChar(ProcName))); Der Kompiler schluckt den Code, gibt aber eine Warung aus, die heisst: Bedenkliche Typumwandlung von String in PAnsiChar. Gruss Jerry |
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Du brauchst noch eine lokalen AnsiString
Delphi-Quellcode:
var
ProcNameAnsi: AnsiString; begin ... ProcNameAnsi := ProcName; P := Pointer(GetProcAddress(ModuleHandle, PAnsiChar(ProcNameAnsi))); |
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Vielen Dank, das scheint zu klappen.
Erhalte aber trotzdem noch folgende Fehlermeldung: W1058 Implizite String-Umwandlung mit potetiellem Datenverlust von String zu AnsiString. Ich denke aber ist bei mir nicht relevant? Was meinst Du? Gruss Jerry. |
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Das ist keine Fehlermeldung sondern eine Warnung ;-) Und die sagt nichts anderes aus als dass bei der Umwandlung zu Ansistring Daten verloren gehen können. Ist ja auch logisch, man muss sich dessen eben nur bewusst sein (zum Beispiel wenn umlaute etc. enthalten sind das diese je nach Sprache bei der Umwandlung verloren gehen)
|
AW: Projekt von Delphi 2007 auf Delphi 2010 umstellen
Super, vielen Dank. Jedenfalls passt es so, es funzt.
Grüsse Jerry |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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