![]() |
LoadLibrary geht hier - dort nicht!?
hallo!
Ich weiss wirklich nicht mehr weiter. Habe dieses Stückchen Quelltext, einmal auf meinem einem Rechner und dann zu testzwecken auf einem anderen probiert. Aus irgendeinem für mich unerkenntlichen grund bleibt der pointer von to_upper auf dem 2ten rechner auf NIL und auf dem ersten ist alles ok. "UnserTollesHandle" ist immer ungleich 0, also die DLL scheint er ja zu finden.
Delphi-Quellcode:
Wenn jemand ein ähnliches Problem hatte, oder vielleicht so weiss woran es liegen kann - vielen dank im vorraus :).
type
THandle = Integer; var UnserTollesHandle: THandle; procedure initializes(pfad:string); var dllname:string; begin dllname:=pfad+'dllname.dll'; UnserTollesHandle := LoadLibrary(PChar(dllname)); if UnserTollesHandle <> 0 then begin @to_upper := GetProcAddress(UnserTollesHandle, 'to_upper'); SysLOG(' to_upper is at '+inttostr(Longword(Addr(u_scm.to_upper)))+'\'); SysLOG(' to_upper returns '+inttostr(u_scm.to_upper(1,2))+'\'); end else exception.create('Can''t initialize the dll'); end; Bis denne, Jan |
Re: LoadLibrary geht hier - dort nicht!?
Hi überprüf mal ganz genau den Pfad was du angibst
Schon mal mit debuggen probiert? wenn des nichts hilft dann kannst du ja davor noch ein if Fileexists einbauen |
Re: LoadLibrary geht hier - dort nicht!?
Zitat:
Ich hab ehrlich keine ahnung was daran schuld ist :|. Bis denne, Jan |
Re: LoadLibrary geht hier - dort nicht!?
Liegt die DLL auch wirklich in der gleichen Version bereit?
|
Re: LoadLibrary geht hier - dort nicht!?
Wie initialisierst du deinen Pfad?! Endet der Pfad auch immer mit einem "\"? Denn ab und zu liefern bestimmte Funktionen kein "\" am Ende des Pfad-Strings, d.h. eventuell schaut das so aus:
Delphi-Quellcode:
// auf deinem PC:
pfad = 'C:\Test\dllname.dll' // auf einem anderen PC: pfad = 'C:\Testdllname.dll' |
Re: LoadLibrary geht hier - dort nicht!?
Frage doch mal mit GetLastError den Fehlercode ab. Vieleicht hilft das ein bischen weiter. Manchmal fehlt auch eine Abhängigkeit für die DLL.
|
Re: LoadLibrary geht hier - dort nicht!?
Ich hatte unter delphi 6 auch einige probleme mit dem dynamischen binden von dlls.
Wie sieht denn dein to_upper genau aus? Ich hatte zb. die Adresszuweisungen zuerst als "procedure of Object" deklariert und erst als procedure ohne "of Object" funktionierte es alles richtig. Hast du die Methoden auch alle als stdcall deklariert? |
Re: LoadLibrary geht hier - dort nicht!?
Moin Jan,
ich würde mal sagen LoadLibrary ist hier nicht das Problem. Offensichtlich existiert auf dem anderen Rechner die Funktion in der angegebenen DLL nicht. Entweder zieht sich das Programm die falsche DLL, oder sie liegt in einer anderen Version vor, als auf dem Rechner, auf dem es funktioniert. Hiermit ![]() |
Re: LoadLibrary geht hier - dort nicht!?
Nimm mal folgende Funktion und lass dir direkt nach LoadLibrary den Pfad anzeigen:
Delphi-Quellcode:
function GetModulePath(const Module: HMODULE): string;
var L: Integer; begin L := MAX_PATH + 1; SetLength(Result, L); {$IFDEF MSWINDOWS} L := Windows.GetModuleFileName(Module, Pointer(Result), L); {$ENDIF MSWINDOWS} {$IFDEF UNIX} L := GetModuleFileName(Module, Pointer(Result), L); {$ENDIF UNIX} SetLength(Result, L); end; |
Re: LoadLibrary geht hier - dort nicht!?
Danke für die vielen Antworten.
Die beiden DLLs sind vollkommen identisch. Genauso wie die aufrufende exe. (Ich habe sie testweise beide gelöscht und dann per batchdatei neu rüberkopiert.) Aus irgend einem weiterem unerkenntlichen Grund :) - schafft er es jetzt nicht mal mehr die dll mit loadlibrary zu laden :|. Ich habe eine debugdatei erzeugt, und die angaben stimmen. Es funktioniert auf dem einem PC auf dem anderen nicht.
Code:
Ich habe es einmal mit
Rechner1
[14:34:10:DLL] pfad: C:\dev\MyProject\ [14:34:10:DLL] dllname: C:\dev\MyProject\dllname.dll [14:34:10:DLL] LastError: 1 [14:34:10:DLL] handle:87818240 Rechner2 [14:35:25:DLL] pfad: E:\MyProject\ [14:35:25:DLL] dllname: E:\MyProject\dllname.dll [14:35:25:DLL] LastError: 0 [14:35:25:DLL] Handle: 0
Delphi-Quellcode:
und
UnserTollesHandle := LoadLibrary(PChar(pfad+'dllname.dll'));
Delphi-Quellcode:
probiert, beides schlägt nur auf dem 2.rechner fehl.
UnserTollesHandle := LoadLibrary(PChar(dllname));
edit: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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 by Thomas Breitkreuz