Hallo zusammen,
ich versuche seid 2 Tagen über Win32::API die DLL "FTD2XX.dll" zu nutzen, um auf das entsprechende USB Funkmodul zuzugreifen. In begrenztem Maße funktioniert das auch, denn z.B. die Öffnen-Funktion gibt auch einen entsprechenden "Successful"-Status zurück. Der zweite Parameter, der zurückgegeben werden soll ist ein sog. FT_HANDLE Objekt, auf welches ich dann sämtliche anderen Funktionen wie z.B. FT_Close anwenden kann.
Jetzt schön langsam zum Problem: Die Funktion FT_Open erwartet von mir als Übergabeparameter zum einen die Devicennummer und zum anderen einen Pointer auf die Variable, in welcher das Handle abgelegt werden soll. Deshalb habe ich folgende Code erzeugt:
Win32::API::Type->typedef( 'FT_HANDLE', 'PVOID' );
Win32::API::Type->typedef( 'FT_STATUS', 'ULONG' );
#import function
my $fct_open = new Win32::API( 'FTD2XX', 'FT_Open', 'IP', 'I');
unless( $fct_open ){
print("FT_Open not found!\n");
return 0;
}
#call imported function
my $handle = " ", x 64;
my $status = $fct_open->Call( $devNum, $handle );
Der Wert in $status passt mir wie gesagt schon ganz gut, der Wert in $handle sieht jedoch in etwa so aus: `;7
Das würde ich als Speicheradresse interpretieren (Siehe dazu bitte auch mein weiteres Thema zum Auslesen einer Speicheradresse).
Eigentlich kann mir der Wert in $handle ja egal sein, solange die anderen Funktionen damit umgehen können. Können sie aber leider nicht.
Kann es daran liegen, dass die anderen Funktionen ein Handle vom Typ FT_HANDLE verlangen, ich aber die FT_Close Funktion beispielsweise folgendermaßen deklariere:
my $fct_close = new Win32::API( 'FTD2XX', 'FT_Close', 'P', 'I' );
unless( $fct_close ){
print("FT_Close not found!\n");
return 0;
}
my $status = $fct_close->Call( $handle );
Jedoch ergibt das Ersetzen des Eingangsparamtertyps 'P' durch irgendeinen andern immer eine Fehlermeldung.
Bin also absolut ratlos und hoffe, dass jemand wenigstens einen Hauch einer Idee hat. Am besten natürlich, hätte das schon mal jemand mit der entsprechenden DLL hinbekommen...
Grüße
Hellmaker