DLL-Funktionen nutzen mit Win32::API

01/01/2009 - 15:33 von Peter Mayr | Report spam
Hallo zusammen,

ich beschàftige mich seit Tagen mit folgendem Code:

use Win32::API;

my $iniFile = './yasdi.ini';
my $device;
my $self = {
ini => $iniFile,
devices => $device};

my $init = Win32::API->new('yasdimaster', 'yasdiMasterInitialize', 'PP',
'V') or die Win32::FormatMessage(Win32::GetLastError);

my $ISBC = $init->Call($self->{ini}, $self->{devices});


In der Dokumentation zu der Funktion steht dazu folgendes:

void yasdiMasterInitialize(char * cIniFileName, DWORD * pDriverCount);

Parameter:
cIniFileName: Dateiname der Konfigurationsdatei (yasdi.ini) inklusive Pfad.
pDriverCount: Verweist auf eine Variable, in der nach dem Aufruf die
Anzahl der in YASDI zurzeit geladenen Schnittstellentreiber
zurückgegeben werden.


Das Skript bricht immer bei Auführung des Calls mit "Perl.exe - Fehler
in Anwendung" ab.
Bevor der Call ausgeführt wird, sehen die Variablen wie folgt aus:
Name Type Value
$ISBC scalar
$device scalar
$iniFile scalar ./yasdi.ini
$init Win32::API
->{dll} scalar 1761869824
->{dllname} scalar yasdimaster
->{in} array
->[0] scalar 2
->[1] scalar 2
->{out} scalar 0
->{proc} scalar 1761878981
->{procname} scalar yasdiMasterInitialize
$self hash
->{devices} null
->{ini} scalar ./yasdi.ini

Wer hat Erfahrung mit dem Modul und kann mir weiterhelfen?

Ein erfolgreiches Jahr an alle wünscht
Peter
 

Lesen sie die antworten

#1 Slaven Rezic
01/01/2009 - 20:51 | Warnen spam
Peter Mayr writes:

Hallo zusammen,

ich beschàftige mich seit Tagen mit folgendem Code:

use Win32::API;

my $iniFile = './yasdi.ini';
my $device;
my $self = {
ini => $iniFile,
devices => $device};

my $init = Win32::API->new('yasdimaster', 'yasdiMasterInitialize',
PP', 'V') or die


^^^^
Das hier dürfte nicht kompilieren. Meintest du vielleicht 'P'? Wie
auch immer, die Inputparameter müssen als Arrayreferenz übergeben
werden:

['P','V']

Als letzter Parameter kommt der Wert der Ausgabe. Ich weiß gerade
nicht, wie man void darstellen muss. Vielleicht kannst du den
Parameter weglassen, undef verwenden, oder einfach 'N' oder 'I'
spezifizieren.

Gruß,
Slaven

Slaven Rezic - slaven <at> rezic <dot> de

tkrevdiff - graphical display of diffs between revisions (RCS, CVS or SVN)
http://ptktools.sourceforge.net/#tkrevdiff

Ähnliche fragen