DLL mit Perl ansprechen

04/10/2009 - 15:22 von Thomas Meier | Report spam
Hallo,

ich will ein R&S Messgeràt per LAN steuern. Dazu liefert der Hersteller
eine dll mit:
http://www.rohde-schwarz.com/webhel...ctions.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!";


Win32::API->Import("kernel32", "int GetCurrentProcessId()");
$PID = GetCurrentProcessId();
print "$PID"; # 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";
print "ibsta: $ibsta";
print "iberr: $iberr";
print "ibcntl: $ibcntl";
 

Lesen sie die antworten

#1 Jan Schmidt
05/10/2009 - 21:26 | Warnen spam
Thomas Meier schrieb:
Hallo,

ich will ein R&S Messgeràt per LAN steuern. Dazu liefert der Hersteller
eine dll mit:
http://www.rohde-schwarz.com/webhel...ctions.htm



Nicht dass ich Dir den Spass verderben wöllte - aber für sowas scheint
mir Labview besser geeignet zu sein - zumal Du von Perl wie Du selbst
sagst, wenig Ahnung hast.

Das Interface sieht ziemlich nach GPIB aus (IEEE488) also dem
Hausinterface von National Instruments.

(In irgendeiner C't - ich glaube aus 2008 gabs mal eine voll
funktionsfàhige Version von Labview)

jan

Ähnliche fragen