www.mikrocontroller.net

Forum: PC-Programmierung rsib32.dll mit Perl ansprechen


Autor: Randy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_Interf...

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
#!/usr/bin/perl -w
use Win32::API;
use strict;

my $PID;

my $ub;              # short
my $ibsta = 42;          # short
my $ref_ibsta = \$ibsta;
my $iberr = 43;          # short
my $ref_iberr = \$iberr;
my $ibcntl = 16777318;      # unsigned long
my $ref_ibcntl = \$ibcntl;



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", $ref_ibsta, $ref_iberr, $ref_ibcntl); # hier stürzt es ab

print "ub: $ub\n";
print "ref_ibsta: $ibsta\n";
print "ref_iberr: $iberr\n";
print "ref_ibcntl: $ibcntl\n";


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.