AGB  ·  Datenschutz  ·  Impressum  







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

loadlibrary unter W10

Ein Thema von joacim · begonnen am 13. Dez 2019 · letzter Beitrag vom 19. Dez 2019
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.963 Beiträge
 
Delphi 12 Athens
 
#1

AW: loadlibrary unter W10

  Alt 16. Dez 2019, 04:50
LoadLibrary läuft jetzt zwar durch und liefert (angeblich)
auch ein handle (268435456). Das kommt mir aber merkwürdig vor. Außerdem liefert ein GetLastError als Ergenis
eine 5 (access denied). Der Versuch diese Handle in einer der DLL-Funktionen zu verwenden liefert dann
auch gleich wider einen Fehler. (Externe exception E06D7363).
Wie meinst du das "in einer der DLL-Funktionen zu verwenden"? Das Handle, das LoadLibrary liefert, ist das Handle der DLL und kann verwendet werden um die Funktionen der DLL dynamisch zu laden.
Das hat aber nichts mit dem Handle zu tun, das du an eine der Funktionen der DLL übergeben kannst (in den Beispielen z.B. ph_DeviceHandle genannt).
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
joacim

Registriert seit: 30. Apr 2003
Ort: Immenrode
61 Beiträge
 
Delphi 6 Professional
 
#2

AW: loadlibrary unter W10

  Alt 16. Dez 2019, 07:26
Nach verschidenen Tests bekomme ich jetzt die ersten Ergenisse. Versuche die Funktionen des Treibers
zu verwenden, klappten aber immer noch nicht. Das Problem lag in einer fehlenden FAR Deklaration beim
Import der Funktionen.
@jaenicke
Es gibt aber immer noch Unklarheiten. Die Funktionen des Treibers verlangen im Aufruf ein Handle. Ich habe
bisher gedacht (und es bei dem Vorläuferprojekt auch so gemacht), das dort das Handle eingetragen werden
muss, dass bei LoadLibrary zurückkommt. Das funktioniert zwar, aber ich kann genauso gut Null eintragen und
bekomme z.B. sinnvolle Ergebnisse beim Lesen der digitalen Eingänge. Ich erwarte nicht, diese Eigenschaft
hier zu klären, da werde ich mal mit dem Hersteller Kontakt aufnehmen.

Nachdem nun die größten Hürden genommen sind, kann ich mit der eigentlichen Verwendung des Treibers
beschäftigen. Nochmals denke an alle und schon mal frohe Weihnachten.

Geändert von joacim (16. Dez 2019 um 07:29 Uhr)
  Mit Zitat antworten Zitat
Alt 16. Dez 2019, 07:46     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.963 Beiträge
 
Delphi 12 Athens
 
#4

AW: loadlibrary unter W10

  Alt 16. Dez 2019, 11:02
Es gibt aber immer noch Unklarheiten. Die Funktionen des Treibers verlangen im Aufruf ein Handle. Ich habe
bisher gedacht (und es bei dem Vorläuferprojekt auch so gemacht), das dort das Handle eingetragen werden
muss, dass bei LoadLibrary zurückkommt.
Wie das geht sieht man eigentlich schon in den Parametern der Funktionen. Du hast dort z.B. bei einem Board eine Funktion i_PCI3016_OpenBoardViaIndex, die den Boardindex bekommt und als var-Parameter die Variable mit dem Handle. Dementsprechend ist zu erwarten, dass die Funktion das Handle in eben diese Variable hineinschreibt (sonst müsste es ja kein var-Parameter sein).

Sicher, wenn du da vorher deinen Handle-Wert hineinpackst, wird der einfach überschrieben, deshalb merkst du das ohne es zu debuggen nicht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
joacim

Registriert seit: 30. Apr 2003
Ort: Immenrode
61 Beiträge
 
Delphi 6 Professional
 
#5

AW: loadlibrary unter W10

  Alt 16. Dez 2019, 13:41
Ich habe hier - nur als Beispiel - zwei Funktionen

Delphi-Quellcode:
function b_ADDIDATA_GetNumberOfDigitalInputs(dw_DeviceHandle : DWord; var w_NumberOfChannels : word) : byte; far; stdcall; external 'ADDIDATA.DLL';
function b_ADDIDATA_Read4DigitalInputs(dw_DeviceHandle : DWord; b_port : byte; var b_portValue : byte) : byte; far; stdcall; external 'ADDIDATA.DLL';
Wie schon geschrieben, wurde im Vorläuferprojekt immer das Handle an die Funktion übergeben.
Die beiden Funktionen erwarten auch hier die Übergabe von dw_DeviceHandle, nicht als var, also nicht als Rückgabewert!

In der Dokumentation steht z.B.
<return value> = b_ADDIDATA_Read4DigitalInputs(DWORD dw_DeviceHandle,
BYTE b_port : byte,
PBYTE pb_portValue)

Ich interpretiere PBYTE als Pointer auf ein Byte, daher VAR im Delphi. dw_DeviceHandle ist aber DWORD also kein VAR,
also auch kein Rückgabewert. Warum ist es völlig gleichgültig, was ich da übergebe? Das Lesen der digitalen Eingänge funktioniert jerdenfalls, auch mit dw_DeviceHandle = 0. Die Antwort kann wahrscheinlich nur der Hersteller geben.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: loadlibrary unter W10

  Alt 16. Dez 2019, 14:55
DeviceHandle! Das Handle des Geräts und nicht das Handle der DLL. Die Funktion muss ja wissen von welchem Gerät du die Infos willst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.963 Beiträge
 
Delphi 12 Athens
 
#7

AW: loadlibrary unter W10

  Alt 16. Dez 2019, 15:34
Wie schon geschrieben, wurde im Vorläuferprojekt immer das Handle an die Funktion übergeben.
Die beiden Funktionen erwarten auch hier die Übergabe von dw_DeviceHandle, nicht als var, also nicht als Rückgabewert!
Und wie sieht es mit i_ADDIDATA_OpenWin32Driver und i_ADDIDATA_GetCurrentDriverHandle aus?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
joacim

Registriert seit: 30. Apr 2003
Ort: Immenrode
61 Beiträge
 
Delphi 6 Professional
 
#8

AW: loadlibrary unter W10

  Alt 18. Dez 2019, 05:59
@jaeinicke

Der Aufruf von i_ADDIDATA_OpenWin32Driver liefert als Handle immer Null zurück.
Die Aufrufe der anderen Funktionen, die das Handle benötigen, funktionieren aber,
wenn ich dort diese Null eintrage. Ich hätte für ein Handle eigentlich einen Wert
ungleich Null erwartet

Mit Euren Hilfen und Anregungen habe ich jetzt die wichtigsten Dinge zum Laufen
gebracht, frage mich aber immer noch, warum das Handle Null ist.
  Mit Zitat antworten Zitat
Alt 18. Dez 2019, 06:31     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort

 

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 14:49 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