AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DLL-Funktion aus einer anderen DLL aufrufen.
Thema durchsuchen
Ansicht
Themen-Optionen

DLL-Funktion aus einer anderen DLL aufrufen.

Ein Thema von DerNutzer · begonnen am 14. Sep 2017 · letzter Beitrag vom 15. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
DerNutzer

Registriert seit: 14. Sep 2017
7 Beiträge
 
#1

DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 09:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#2

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 12:56
Vermutlich muss das stdcall immer gesetzt sein, unabhängig von WIN32.

Edit: (Wobei das nicht selber setzen solltest.)
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 13:27
Vielleicht fehlt die OLE Initialisierung? (CoInitialize usw.)

Vermutlich muss das stdcall immer gesetzt sein, unabhängig von WIN32.
Unter 64-Bit gibt es nur noch eine Aufrufkonvention, egal was man hinschreibt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
DerNutzer

Registriert seit: 14. Sep 2017
7 Beiträge
 
#4

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 13:30
Zitat:
Vermutlich muss das stdcall immer gesetzt sein, unabhängig von WIN32.
Danke für den Tipp. Allerdings ist das nicht des Rätsels Lösung. Es hängt weiterhin.

Zitat:
Vielleicht fehlt die OLE Initialisierung? (CoInitialize usw.)
Das werde ich morgen mal checken. Erstmal vielen Dank!
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?

Geändert von DerNutzer (14. Sep 2017 um 13:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 15:19
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
DerNutzer

Registriert seit: 14. Sep 2017
7 Beiträge
 
#6

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 18:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 18:13
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 18:55
Die DLLmain ist bis auf den Funktionsaufruf leer. Ich habe extra eine neue DLL für die Fehlersuche angelegt.
Da wird das Problem liegen. In der DllMain sollte man nie komplexen Code ausführen. Dass ansonsten unerwünschtes Verhalten auftreten kann ist von MS auch dokumentiert:
https://msdn.microsoft.com/en-us/lib...best_practices
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
DerNutzer

Registriert seit: 14. Sep 2017
7 Beiträge
 
#9

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 19:49
Zitat:
Ich würde es mal mit dynamischen Laden probieren, da sieht man gleich beim Aufruf von LoadLibrary, ob da schon was schief geht.
Auch das habe ich versucht. Das Resultat war auch da ein Hänger.

Zitat:
Da wird das Problem liegen. In der DllMain sollte man nie komplexen Code ausführen.
Sollte da die Lösung liegen? Das versuche ich morgen mal. Daran habe ich mit keiner Silbe gedacht. Vielen Dank für den Tipp.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: DLL-Funktion aus einer anderen DLL aufrufen.

  Alt 14. Sep 2017, 20:21
Zitat:
Zitat:
Da wird das Problem liegen. In der DllMain sollte man nie komplexen Code ausführen.
Sollte da die Lösung liegen? Das versuche ich morgen mal. Daran habe ich mit keiner Silbe gedacht. Vielen Dank für den Tipp.
Bin mir ziemlich sicher. Lager deinen Funktionsaufruf einfach testweise mal in eine dedizierte exportierte Funktion aus, die du dann aus dem Hauptprogramm aus aufrufst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 13:56 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