Ben inmiddels al een paar dagen bezig om met mijn rigol scope te praten via vba (excel). Dit om makkelijk automatische metingen te doen en te verwerken.

Als voorbeeld heb ik deze pagina van madwizard gebruikt: klik.

In borland C++ heb ik het allemaal wel aan de praat, maar met vb(a) en dlls heb ik geen ervaring.

De volgende code gebruik ik.


Private Declare Function GetDeviceNum Lib "c:\Rigolusb1000_UI.dll" () As Integer
Private Declare Function ReadUSB Lib "c:\Rigolusb1000_UI.dll" (ByVal scope As Integer, ByVal pA As Integer, ByVal pOut As String) As Integer
Private Declare Function WriteUSB Lib "c:\Rigolusb1000_UI.dll" (ByVal scope As Integer, ByVal func As Integer, ByVal sequence As Integer, ByVal length As Integer, ByVal pData As String) As Integer
Private Declare Function Vendor_Request_Read Lib "c:\Rigolusb1000_UI.dll" (ByVal scope As Integer, ByVal request As Integer, ByVal value As Integer, ByVal index As Integer, ByVal length As Integer, ByVal pOut As String) As Integer

Private Sub CommandButton1_Click()
    MsgBox (GetDeviceNum())
End Sub

Private Sub CommandButton2_Click()
  Dim buf_vendor As String
  Dim ans As Integer

  buf_vendor = Space(128)

  ans = Vendor_Request_Read(0, 9, 0, 0, 4, buf_vendor)
  MsgBox (ans)
  MsgBox (buf_vendor)
End Sub

De functie GetDeviceNum lijk mooi te werken. Deze geeft 0 terug als de scope niet is aangesloten en 1 als deze wel aangesloten.
Het probleem zit hem in Vendor_Request_Read deze moet in de string buf_vendor RIGOL schrijven. Bij borland gebruikt dat ook maar in vb niet dan komt er alleen een hoop rommel in. De return value (ans) klopt daar in tegen weer wel. Ik heb het idee dat het temaken heeft met de string in vb en char* in de dll.