Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   loadlibrary unter W10 (https://www.delphipraxis.net/202846-loadlibrary-unter-w10.html)

jaenicke 16. Dez 2019 11:02

AW: loadlibrary unter W10
 
Zitat:

Zitat von joacim (Beitrag 1453506)
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.

joacim 16. Dez 2019 13:41

AW: loadlibrary unter W10
 
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.

Luckie 16. Dez 2019 14:55

AW: loadlibrary unter W10
 
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.

jaenicke 16. Dez 2019 15:34

AW: loadlibrary unter W10
 
Zitat:

Zitat von joacim (Beitrag 1453542)
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? :wink:

joacim 18. Dez 2019 05:59

AW: loadlibrary unter W10
 
@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.

joacim 18. Dez 2019 10:04

AW: loadlibrary unter W10
 
Doku zu i_ADDIDATA_OpenWin32Driver
...
-Output
PDWORD pdw_DriverHandle
Returns the driver handle. This parameter i the first to be called up for each function.

Soweit so klar, trotzdem würde ich da keine Null erwarten.

joacim 19. Dez 2019 09:39

AW: loadlibrary unter W10
 
hab ich gemacht, kommt aber nur eine große Zahl als Fehlercode, die in keiner Liste steht.
Das ist auch nicht weiter verwunderlich, weil i_ADDIDATA_OpenWin32Driver mit Null
( = kein Fehler) zurückkommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.
Seite 3 von 3     123   

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