Heiner: Rückgabewerte von ocx-Objekt verarbeiten?

Beitrag lesen

Von StarMicronics habe ich einen Zusatz zum Druckertreiber für einen Bon-Drucker (mit seriellem Interface) erhalten, mit dem man den Drucker-Status (Online? Papier alle? Deckel zu?) abfragen können soll. Mit einem mitgelieferten Demo-Beispiel in VB geht das auch. Aber ich muss den Aufruf aus dem HTML einer Webseite mit VBScript machen, und das kriege ich nicht hin. Ich wäre sehr dankbar (bis zum 17.02.2006 nicht nur mit Worten, sondern mit echten 100 Euro für die erste funktionierende Lösung als Dankeschön!), wenn mir jemand einen Tipp gibt. Also hier die Details:

Das Objekt habe ich mit der ID "StarSerial" und der ClassId definiert. Das Objekt hat diverse Methoden, u. a. auch StarPrinterIsOnline und StarGetPrinterStatus. Diesen müssen jeweils zwei Werte übergeben werden, die Portnummer und die Baudrate.

Der Online-Check wird sauber ausgeführt, aber der Status-Check bringt immer Fehler.

Die Methode zum Online-Check liefert einen boolean Rückgabewert, die Methode zum Status-Check liefert hingegen einen Rückgabewert, der mit dem "Public Type" PrinterStatus (vermutlich im ocx-Objekt) typisiert sein soll. "Type Member" sind u. a. angegeben als:

  • StatusVersion As Integer
  • Online As Boolean
  • CoverOpen as Boolean
  • PaperLow as Boolean

Jetzt suche ich eine Codierung in VBScript, mit der ich an die Member-Werte ran komme.

Hier ist der Code, der immer zum Fehler "Object required" führt, und wo ich skizziert habe, wie ich mir die Verarbeitung gedacht hatte:

<HTML>

<HEAD>
    <TITLE>Druckerstatus abfragen</TITLE>
  </HEAD>

<object classid="CLSID:BDB1A3EE-D03A-46F4-8EEB-2498E7684D23"
    id=StarSerial>
  </object>

<SCRIPT LANGUAGE=VBScript>
      Sub GmBon
'       ------------------------------------------------------------
        ' Drucker online? Erst weiter, wenn OK:
        DO
          IF StarSerial.StarPrinterIsOnline("COM1:", 9600) THEN
            MsgBox "ONLINE"
            EXIT DO
          ELSE
            MsgBox "OFFLINE"
          END IF
        LOOP
'       ------------------------------------------------------------
        ' Deckel zu? Erst weiter, wenn OK:
        DIM Status
        SET Status = StarSerial.StarGetPrinterStatus("COM1:", 9600)
'       DIM CoverOpen
'       SET CoverOpen = Status.CoverOpen
'       If CoverOpen THEN
'         MsgBox "THEN"
'       ELSE
'         MsgBox "ELSE"
'       END IF
     End Sub
  </script>

<BODY onLoad="VBScript:GmBon">
    <PRE>
                      Das ist der Bon
                Dankeschön - Auf Wiedersehn
          0000021378       13.02.2006 - 17:35:42       001
    </PRE>
  </body>
</html>

Hier ist auch noch ein VB-Coding aus dem Demo-Programm als Anhaltspunkt für eine Lösung, die so leider in VBScript nicht zu machen ist:

Private Sub DisplayStatus(headline As String)

Dim feedback As String
    Dim status As PrinterStatus

feedback = headline + vbCrLf + vbCrLf

status = Me.StarSerial1.StarGetPrinterStatus(Me.textPort.Text, CLng(Me.textBaud.Text))

If status.Error_UnableToOpenSerialPort Then
        feedback = feedback + " Unable To Open Serial Port!"
    ElseIf status.Error_Timeout Then
        feedback = feedback + " Timeout retreiving status!"
    Else
        feedback = feedback + " Online: " + CStr(status.Online) + vbCrLf
        feedback = feedback + " Cover: " + IIf(status.CoverOpen, "Open", "Closed") + vbCrLf
        feedback = feedback + " Paper: " + IIf(status.Error_OutOfPaper, "Empty", IIf(status.PaperLow, "Low", "Loaded")) + vbCrLf
        feedback = feedback + " Non-recoverable error: " + CStr(status.Error_NonRecoverable) + vbCrLf
        feedback = feedback + " Auto-cutter error: " + CStr(status.Error_AutoCutter) + vbCrLf
        feedback = feedback + " Mechanical error: " + CStr(status.Error_Mechanical) + vbCrLf
    End If

MsgBox feedback, vbOKOnly + vbInformation, "Printer Status"
End Sub