dll-Aufruf führt zu Abbruch

  • Habe VISA32.dll in der Version 4.0 von National Instruments geladen. Leider funktioniert der dll-Aufruf _viExecCommand nicht. Das Öffnen mit

    _viOpen("GPIB::7::0")

    klappt. Der angeschlossen Signalgenerator geht in den Remote-Zustand. Mit dem nächsten Befehl

    $s_answer = _viExecCommand(7,"RF 123.456MHZ",1000)

    springt das Programm in die eingebundene Visa.au3. Dort wird die Funktion _viExecCommand ausgeführt, die ihrerseits _viPrintf aufruft. Dort schließlich wird mit

    $a_results = DllCall("visa32.dll", "int", "viPrintf", "int", $h_session, "str", $s_command)

    die Dll aufgerufen. Der Befehl wird schließlich vom angeschlossenen Gerät ausgeführt, der Generator setzt die Frequenz auf 123.456 MHz. Allerdings kehrt das Programm nicht wieder aus der DLL zurück, eine Fehlermeldung gibt es nicht. Wenn ich eine kompilierte Version erstelle, so erhalte ich jedoch die Meldung:

    $a_results = DllCall("visa32.dll", "int", "viPrintf", "int", $h_session, "str", $s_command)
    Error: AutoIt has detected the stack has become corrupt. Stack corruption typically occurs when either the wrong calling convention is used or when the function is called with the wrong number of arguments.

    Wer weiß Rat? Wo könnte ich ggf. die dll-Dokumentation bekommen? Bei NI habe ich sie nicht finden können. Ich freue mich über jeden Tipp!

    • Offizieller Beitrag

    Hallo!

    Laut dieser Dokumentation müsste die Funktion so definiert werden:

    Code
    $a_results = DllCall("visa32.dll", "long", "viPrintf", "long", $h_session, "str", $s_command)
  • Hallo Bernd,

    vielen Dank für Deinen Tipp und das Dokument. Leider funktioniert es auch mit der Änderung auf "long" nicht. Gibt es sonst noch eine Idee?

    Skipper

  • Hallo peethebee,

    vielen Dank für den Hinweis, der Effekt gezeigt hat: Mit ulong anstelle int oder long kehrt die Dll zurück und das AutoIt-Skript wird weiter abgearbeitet. Leider wird das Kommando an das angeschlossene Gerät nicht mehr geschickt. Das habe ich mit NI-Spy beobachtet. So freue ich mich auf weitere Vorschläge.

    Skipper