Forum: PC-Programmierung rsib32.dll mit Perl ansprechen


von Randy (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.