nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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
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