DLL mit Perl ansprechen
Von: Thomas Meier (antispam42@spamspam.invalid) [Profil]
Datum: 04.10.2009 15:22
Message-ID: <7irlt3F33bislU1@mid.uni-berlin.de>
Newsgroup: de.comp.lang.perl.misc
Datum: 04.10.2009 15:22
Message-ID: <7irlt3F33bislU1@mid.uni-berlin.de>
Newsgroup: de.comp.lang.perl.misc
Hallo,
ich will ein R&S Messgerät per LAN steuern. Dazu liefert der Hersteller
eine dll mit:
http://www.rohde-schwarz.com/webhelp/zvb/HW_Interfaces/LAN_Interfaces/RSIB_Interface_Funct
ions.htm
Um das mit Perl aus steuern zu können habe ich mir das durchgelesen:
http://search.cpan.org/~acalpini/Win32-API-0.41/API.pm
Das Beispiel aus o.g. Link funktioniert, aber schon der erste Versuch
eine Funktion aus der rsib32.dll anzusprechen quittiert der perl
Interpreter mit einer
"Perl Command Line Interpreter hat ein Problem festgestellt und muss
beendet werden. Problembericht senden?"
Ich bin bei Perl absoluter Anfänger. Das importieren der Dll-Funktion
bereitet auch schon Schwierigkeiten - Perl will kein "short" und kein
"unsigned".
Hat jemand eine Idee was man machen kann?
Ist Perl für sowas überhaupt geeignet? Die Beispiele des Herstellers
sind in Sprachen wie Visual C, C++, Visual Basic und .Net. Aber ich
wollte eigentlich keins dieser Fässer aufmachen. Nur ein bisschen
Quick&Dirty Daten vom Gerät holen, ohne gleich eine neue IDE zu
erlernen. (und in Perl wollt ich mich eh mal einarbeiten)
Vielen Dank
Thomas
#!/usr/bin/perl -w
use Win32::API;
use strict;
my $PID;
my $ub; # short
my $ibsta = 42; # short
my $iberr = 43; # short
my $ibcntl = 16777318; # unsigned long
print "Hello world!\n";
Win32::API->Import("kernel32", "int GetCurrentProcessId()");
$PID = GetCurrentProcessId();
print "$PID\n"; # das funktioniert
#Win32::API->Import("RSIB32", "short WINAPI RSDLLibfind( char far
*udName, short far *ibsta, short far *iberr, unsigned long far *ibcntl)");
# Perl kennt keinen "WINAPI", kein "short" und kein
"unsigned"
Win32::API->Import("RSIB32", "int RSDLLibfind( char far *udName, int far
*ibsta, int far *iberr, long far *ibcntl)");
#Win32::API->Import("RSIB32", "int RSDLLibfind( char *udName, int
*ibsta, int *iberr, long *ibcntl)");
# far oder nicht far: Wird beides akzeptiert
$ub = RSDLLibfind("172.16.48.11", $ibsta, $iberr, $ibcntl); # hier
stürzt es ab
print "ub: $ub\n";
print "ibsta: $ibsta\n";
print "iberr: $iberr\n";
print "ibcntl: $ibcntl\n";
[ Auf dieses Posting antworten ]Antworten
- Jan Schmidt (05.10.2009 21:26)
- Thomas Meier (06.10.2009 20:12)
- Jan Schmidt (06.10.2009 21:22)
- Peter Arnhold (06.10.2009 21:47)
