AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

LoadLibrary geht hier - dort nicht!?

Ein Thema von DracoBlue · begonnen am 13. Mär 2006 · letzter Beitrag vom 13. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
DracoBlue

Registriert seit: 3. Feb 2004
Ort: Berlin
47 Beiträge
 
Turbo Delphi für Win32
 
#1

LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 13:29
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:
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;
Wenn jemand ein ähnliches Problem hatte, oder vielleicht so weiss woran es liegen kann - vielen dank im vorraus :).

Bis denne,
Jan
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#2

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 13:39
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
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
DracoBlue

Registriert seit: 3. Feb 2004
Ort: Berlin
47 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 13:51
Zitat von gsh:
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
Exakt das habe ich gemacht. Die datei existiert ja - sonst würde das loadlibary ja 0 zurückgeben.

Ich hab ehrlich keine ahnung was daran schuld ist :|.

Bis denne,
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 13:53
Liegt die DLL auch wirklich in der gleichen Version bereit?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 13:57
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'
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#6

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 14:00
Frage doch mal mit GetLastError den Fehlercode ab. Vieleicht hilft das ein bischen weiter. Manchmal fehlt auch eine Abhängigkeit für die DLL.
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#7

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 14:18
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?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 14:19
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 http://www.dependencywalker.com/ könntest Du Dir die DLL auf dem Rechner, auf dem das Problem auftritt einmal anschauen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 14:32
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;
Andreas
  Mit Zitat antworten Zitat
DracoBlue

Registriert seit: 3. Feb 2004
Ort: Berlin
47 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: LoadLibrary geht hier - dort nicht!?

  Alt 13. Mär 2006, 14:43
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:
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
Ich habe es einmal mit
UnserTollesHandle := LoadLibrary(PChar(pfad+'dllname.dll')); und
UnserTollesHandle := LoadLibrary(PChar(dllname)); probiert, beides schlägt nur auf dem 2.rechner fehl.




edit:
Zitat von shmia:
Nimm mal folgende Funktion und lass dir direkt nach LoadLibrary den Pfad anzeigen:
function GetModulePath(const Module: HMODULE): string;
was möchte diese funktion als parameter? Eigentlich ist der Pfad doch egal, wenn ich die position der dll absolut angebe, oder?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz