![]() |
DLL-Funktion aus einer anderen DLL aufrufen.
Guten Tag,
ich stehe momentan vor einem Problem, wo ich trotz intensiver Suche keine Lösung gefunden habe. Vielleicht findet hier jemand eine Lösung: Ich habe eine Treiber-DLL von einem Fremdanbieter und möchte dessen Funktionen in meiner eigenen DLL aufrufen. Die Funktionsaufrufe habe ich bisher statisch in einer Anwendung ohne Probleme eingesetzt. Wenn ich jetzt aber exakt die selben Aufrufe in meiner DLL verwenden möchte, dann bleibt meine DLL beim Funktionsaufruf hängen. Frage: Was übersehe ich hier? Definition des statische Beispiel: function ps5000aOpenUnit (var handle : smallint; serial : pointer; Modus : smallint) : smallint; {$IFDEF WIN32} stdcall; external 'ps5000a.dll' {$ENDIF} Wie gesagt in EXE ohne Probleme, in DLL dagegen Hänger. |
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Vermutlich muss das stdcall immer gesetzt sein, unabhängig von WIN32.
Edit: (Wobei das nicht selber setzen solltest.) |
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Vielleicht fehlt die OLE Initialisierung? (CoInitialize usw.)
Zitat:
|
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Zitat:
Zitat:
PS: Hab es gleich noch überprüft. Und es ergibt keine Änderung. Was macht eine EXE anders beim Aufruf einer Funktion aus einer DLL als eine DLL? |
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Kannst du noch ein paar zusätzliche Infos liefern?
- Was soll der Funktionsaufruf bewirken? - Hängt es wirklich genau bei diesem Aufruf, oder vielleicht doch an anderer Stelle? - Wie sieht deine Dll Main aus? Ist hier evlt. schon etwas falsch wie z.b. eine blockierende MessageQueue - Hängt die Dll auch OHNE den spezifischen Funktionsaufruf? Normalerweise ist es absolut kein Problem Funktionen aus Dlls in einer Dll aufzurufen. |
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Der Funktionsaufruf dient der Verbindungsaufnahme mit einem PicoScope (Oszilloskop) und funktioniert, wie schon geschrieben, in einer Exe problemlos. Die Funktion liefert dabei einen Handle auf das Gerät zurück. Beim Aufruf kann man noch eine Seriennummer übergeben um ein spezifisches Gerät anzusprechen (übergibt man dort NIL wird das Erstbeste angesprochen) und der Modus beschreibt einfach die Auflösung der Abtastung (16 bit bis 8 bit).
Und der Debugger bleibt genau bei diesem Funktionsaufruf stehen und nur ein Beenden der Anwendung löst das Problem. Die DLLmain ist bis auf den Funktionsaufruf leer. Ich habe extra eine neue DLL für die Fehlersuche angelegt. :) Und der Rest der DLL funktioniert ohne den Aufruf bestens. Und ich verwende ein Delphi XE3 unter Windows 10. |
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Wird die Treiber DLL denn von deiner DLL geladen? Statisch? Dynamisch? Guck doch mal mit dem Prozessexplorer, ob sie überhaupt gefunden und geladen wird. Ich würde es mal mit dynamischen Laden probieren, da sieht man gleich beim Aufruf von LoadLibrary, ob da schon was schief geht.
|
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Zitat:
![]() |
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Zitat:
Zitat:
|
AW: DLL-Funktion aus einer anderen DLL aufrufen.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 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