rsib32.dll mit Perl ansprechen

Gast #1433245
Lesenswert?

Hallo,

ich will ein R&S Speki per LAN steuern. Dazuliefert der Hersteller eine 
dll mit:
http://www.rohde-schwarz.com/webhelp/zvb/HW_Interfaces/LAN_Interfaces/RSIB_Interface_Functions.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. Ich bin deshalb unsicher ob ich das 
"Call by Reference" der dll-Funktion richtig benutze. 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 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.

Vielen Dank
Randy
1
#!/usr/bin/perl -w
2
use Win32::API;
3
use strict;
4

5
my $PID;
6

7
my $ub;              # short
8
my $ibsta = 42;          # short
9
my $ref_ibsta = \$ibsta;
10
my $iberr = 43;          # short
11
my $ref_iberr = \$iberr;
12
my $ibcntl = 16777318;      # unsigned long
13
my $ref_ibcntl = \$ibcntl;
14

15

16

17
print "Hello world!\n";
18

19

20
Win32::API->Import("kernel32", "int GetCurrentProcessId()");
21
$PID = GetCurrentProcessId();
22
print "$PID\n";          # das funktioniert
23

24

25

26

27
#Win32::API->Import("RSIB32", "short WINAPI RSDLLibfind( char far *udName, short far *ibsta, short far *iberr, unsigned long far *ibcntl)");
28
    # Perl kennt keinen "WINAPI", kein "short" und kein "unsigned"
29
Win32::API->Import("RSIB32", "int RSDLLibfind( char far *udName, int far *ibsta, int far *iberr, long far *ibcntl)");
30
#Win32::API->Import("RSIB32", "int RSDLLibfind( char *udName, int *ibsta, int *iberr, long *ibcntl)");
31
    # far oder nicht far: Wird beides akzeptiert
32

33
$ub = RSDLLibfind("172.16.48.11", $ref_ibsta, $ref_iberr, $ref_ibcntl); # hier stürzt es ab
34

35
print "ub: $ub\n";
36
print "ref_ibsta: $ibsta\n";
37
print "ref_iberr: $iberr\n";
38
print "ref_ibcntl: $ibcntl\n";

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren