Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL Problem auf englischem OS (https://www.delphipraxis.net/109445-dll-problem-auf-englischem-os.html)

soulies 1. Mär 2008 15:44


DLL Problem auf englischem OS
 
hoi,

für folgendes Problem benötige ich eine Hilfestellung ...


ich hab ein programm entworfen das mit hilfe einer schnittstellen-unit
bestimmte funktionen einer DLL aufruft.
delphi 7 ent, win xp ger
funktioniert alles ohne probleme ...


starte ich nun aber das programm auf einem us notebook mit win xp eng dann
bekomme ich eine Fehlermeldung mit einer Zugriffsverletzung

die DLL wird über LoadLibrary(..) geladen

ich vermute das die DLL nicht geladen wird - ich eine funktionen der dll aufrufe -
und denn die Zugriffsverletzung als Fehler kommt ...

ich weiß nicht weiter - ihr ?

SirThornberry 1. Mär 2008 15:47

Re: DLL Problem auf englischem OS
 
Wenn du eine Zugriffsverletzung bekommst deutet das darauf hinn das du nicht prüfst ob die DLL geladen werden konnte und auch nicht prüfst ob die Funktion in der DLL gefunden wurde. Baue da am besten eine Prüfung ein und gebe aussagekräftige Fehlermeldungen ein :-)

soulies 1. Mär 2008 16:49

Re: DLL Problem auf englischem OS
 
habe nun herausgefunden das das DLLhandle (dllhandle := loadlibrary(pchar(...)))

auf dem eng-OS immer 0 ist

bisher wurde auf (dllhandle >= 32) geprüft - kann/sollte ich es ändern auf (dllhandle=0)


[info]
die dll und die schnittstellen unit kommen von einer fremdfirma
[/info]

DeddyH 1. Mär 2008 17:18

Re: DLL Problem auf englischem OS
 
Zitat:

Zitat von Win32 SDK zu LoadLibrary
If the function succeeds, the return value is a handle to the module.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.

Wieso 32? Hast Du das mit ShellExecute verwechselt?

soulies 1. Mär 2008 18:10

Re: DLL Problem auf englischem OS
 
wie gesagt kommt die dll und die unit nicht von mir ...

dllhandle >=32 war quasi drin - habe ich nun geändert auf dllhandle <> 0

mit getlasterror bekomm ich auch ne vernünftige meldung - das ist ok


aber ich versteh im prinzip nicht warum alles ok ist bei einem ger-PC mit ger-OS

und bei einem eng-PC und eng-OS nicht mehr

--> die dateien & pfade sind alle identisch ...


aber erstmal danke an euch für jeden hinweis bis hierher

SirThornberry 1. Mär 2008 18:19

Re: DLL Problem auf englischem OS
 
aber wenn dir dort 0 zurück gegeben wird scheint es die DLL nicht zu geben oder sie ist nicht registriert. Vielleicht ist auf dem englischen System ein bestimmtes Update nicht installiert oder dergleichen.

Luckie 1. Mär 2008 20:54

Re: DLL Problem auf englischem OS
 
Zitat:

Zitat von soulies
mit getlasterror bekomm ich auch ne vernünftige meldung - das ist ok

Zeig uns mal deinen Code, wo der Fehler und was für ein Fehler (GetLastError) kommt.

Bernhard Geyer 1. Mär 2008 21:20

Re: DLL Problem auf englischem OS
 
Evtl. hat ja auch der Hersteller der DLL/Schnittstellen-Unit mist gemacht und setzt z.B. C:\Programme als Installationspfad von Programmen vorraus und entläd die DLL sofort wieder wenns nicht passt. Was sagt denn der Hersteller der DLL dazu?

soulies 2. Mär 2008 00:06

Re: DLL Problem auf englischem OS
 
die fehlermeldung lautet:
Zitat:

This application failed to start because ScanCtrl2.dll was not found. Re-installing the application may fix the problem.
der aufruf sieht wie folgt aus:

Delphi-Quellcode:
  unit ScanCtrl2;

  ...

  const
   LibraryName = 'ScanCtrl2.dll';

  ...

  DLLHandle: THandle;

  ...

  procedure LoadDLL;
  begin
    try
      DLLHandle := LoadLibrary(Pchar(LibraryName));

      if (DLLHandle <> 0) then
       begin
        ...
       end
      // Error: ScanCtrl2.dll kann nicht geladen werden !!
      else
       begin
        messagedlg(SysErrorMessage(getlasterror),mterror,[mbok],0); // hier kommt da fehler da dllhandle=0
        ...
      end;
    except
      on E:Exception do
      messagedlg(E.Message,mterror,[mbok],0);
    end;
  end;

begin
  LoadDLL;
end.

den hersteller habe ich NOCH nicht kontaktiert ...

Luckie 2. Mär 2008 00:21

Re: DLL Problem auf englischem OS
 
Delphi-Quellcode:
DLLHandle := LoadLibrary(Pchar(LibraryName));
Öhm, und in welchem Verzeichnis soll dein Programm die DLL finden?

soulies 2. Mär 2008 00:28

Re: DLL Problem auf englischem OS
 
mein programm und die DLL befinden sich im selben Verzeichnis

ich benutze dann nur noch die schnittstellen unit 'ScanCtrl2.pas'
um die verbindung 'herzustellen' und die fkt. aufzurufen ...

Luckie 2. Mär 2008 00:31

Re: DLL Problem auf englischem OS
 
Zitat:

Zitat von soulies
mein programm und die DLL befinden sich im selben Verzeichnis

Äh ja und? Aber das sagst du LoadLibrary nicht. Ohne Pfadangabe wird im aktuellen Arbeitsverzeichnis gesucht, aber das muss nicht zwinget das Programmverzeichnis sein.

soulies 2. Mär 2008 00:35

Re: DLL Problem auf englischem OS
 
als ich einen absoluten pfad übergeb hab
Delphi-Quellcode:
dllhandle := loadlibrary(pchar('C:\ordner\Scanctrl2.dll'));
kam der selbe fehler

Luckie 2. Mär 2008 00:42

Re: DLL Problem auf englischem OS
 
Den Pfad hard codieren ist fast noch schlimmer. Mit Delphi-Referenz durchsuchenParamStr(0) bekommst du den Pfad zu deiner Anwendung und mit Delphi-Referenz durchsuchenExtractFilepath kannst du den Ordner aus dem Pfad extrahieren.

soulies 2. Mär 2008 00:46

Re: DLL Problem auf englischem OS
 
den pfad fest vorzugeben war nur zum testen ...

mit ExtractFilePath & ParamStr(0) bzw. Application.Exename hatte ich es auch probiert

leider auch ohne erfolg

Luckie 2. Mär 2008 00:51

Re: DLL Problem auf englischem OS
 
Komisch. Prüf doch mal mit Delphi-Referenz durchsuchenFileExists, ob er die Datei findet. Wenn er sie findet, muss er sie auc mit MSDN-Library durchsuchenLoadLibrary laden können.

soulies 2. Mär 2008 00:56

Re: DLL Problem auf englischem OS
 
testen kann ich erst montag wieder - aber dann probier ich es nochmal aus ...

bis hierher vielen dank für ursachenforschung & mgl fehler meinerseits

soulies 3. Mär 2008 13:58

Re: DLL Problem auf englischem OS
 
bei mir ist montag morgen und ich hab zusätzlich

mit FileExists geprüft ob die DLL vorhanden ist --> sie ist es

LoadLibrary funkt trotzdem nicht ...


ich werd mich mal beim hersteller melden...

Muetze1 3. Mär 2008 14:56

Re: DLL Problem auf englischem OS
 
Das bedeutet mit anderen Worten: Die DLL hat statische Abhängigkeiten die nicht aufgelöst werden können. Also sie benötigt eine andere DLL oder findet einen Einsprungspunkt nicht. Dies kannst du genau heraus finden, wenn du den ErrorMode vor dem LoadLibrary() umsetzt, dann meldet dir Windows eine entsprechend detaillierte Meldung, welche DLL bzw. welcher Einsprungspunkt nicht gefunden werden konnte.

Bernhard Geyer 3. Mär 2008 15:00

Re: DLL Problem auf englischem OS
 
Für sowas ist auch DependencyWalker sehr zu empfehlen

soulies 3. Mär 2008 15:14

Re: DLL Problem auf englischem OS
 
hi,

neben euren antworten hatte ich nochmal gegoogelt und etwas gefunden

stichwort : Microsoft Visual C++ 2005 Redistributable Package (x86)

man sollte wohl dieses package und das SP1 installieren ...


hab ich gemacht und siehe da - alles läuft


mein problem hat sich damit erledigt

danke an alle ..



cya

Muetze1 3. Mär 2008 15:59

Re: DLL Problem auf englischem OS
 
Ja, mit anderen Worten: DLL nicht vorhanden bzw. DLL Einsprungspunkt nicht vorhanden. Also wie zuletzt vermutet. Damit hättest du gut heraus bekommen, welche DLL bzw. Funktion es genau war.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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