Hi everyone,
I use VB6 and visa32.dll functions.
The issue is that VB6 crashes (closing all VB6 windows) after returning from "reading functiong" : viRead() or viGetAttribute().
Others functions cause no problem (viOpenDefaultRM(), viOpen, viWrite(), viClose), VB6 does not crash.
Can someone help ?
Thanks
Mathieu
Below are informations:
System :
- Windows 10 LTSC IOT 64-bit
- Ni-VISA 2023 Q2
- VB6 SP3
Visa32.dll functions declarations in VB6 (Global Module)
'*********** Liens vers les fonctions VISA de visa32.dll ****************
Public Declare Function Vi_opendefaultRM Lib _
"visa32" Alias "viOpenDefaultRM" (ByRef sens As Long) As Long
Public Declare Function Vi_open Lib _
"visa32" Alias "viOpen" _
(ByVal sesn As Long, ByVal rsrcName As String, ByVal accesMode As Long, ByVal timeOut As Long, ByRef vi As Long) _
As Long
Public Declare Function Vi_read Lib _
"visa32" Alias "viRead" _
(ByVal vi As Long, ByRef bufout As String, ByVal count As Long, ByRef retcount As Long) _
As Long
Public Declare Function Vi_write Lib _
"visa32" Alias "viWrite" _
(ByVal vi As Long, ByVal bufIn As String, ByVal count As Long, ByRef retcount As Long) _
As Long
Public Declare Function Vi_setAtt Lib _
"visa32" Alias "viSetAttribute" _
(ByVal vi As Long, ByVal attrib As Long, ByVal attribState As Long) _
As Long
Public Declare Function Vi_getAtt Lib _
"visa32" Alias "viGetAttribute" _
(ByVal vi As Long, ByVal attrib As Long, ByRef attribState As String) _
As Long
Public Declare Function Vi_close Lib _
"visa32" Alias "viClose" _
(ByVal vi As Long) _
As Long
'************* Déclaration des variables globales *************
Public Vi_RMSession As Long
Public Vi_accesMode As Integer
Public Vi_timeOut As Integer
Public Vi_retcount As Long
Public Vi_CMD As String
Public Vi_Rep As String
Public Vi_re As String
Public Vi_attribState As String
Public Vi_status As Long
functions calling in VB6 (main Form)
Option Explicit
Public Vi_SessionSynthe_1 As Long
Public rsrcSynthe1 As String
Private Sub cmdGo_Click()
rsrcSynthe1 = "TCPIP0::typeyouripadress::inst1::INSTR"
Vi_status = Vi_opendefaultRM(Vi_RMSession)
Debug.Print "Vi_RMSession = " & Vi_RMSession & " with status code : " & Vi_status
'this is ok (status =0 and RM ID is given)
Vi_accesMode = 0
Vi_timeOut = 0
Vi_status = Vi_open(Vi_RMSession, rsrcSynthe1, Vi_accesMode, Vi_timeOut, Vi_SessionSynthe_1)
Debug.Print "Vi_Session Synthe1 = " & Vi_SessionSynthe_1 & " with status code : " & Vi_status
'this is ok (status =0 and RM ID is given)
Vi_CMD = ":FREQ:CW 7 GHZ"
Vi_status = Vi_write(Vi_SessionSynthe_1, Vi_CMD, 15, Vi_retcount)
Debug.Print "Vi CMD" & Vi_CMD & " on Synthé 1 with status code : " & Vi_status
'This is ok : Freq is modify and status =0
Vi_CMD = "*IDN?"
Vi_status = Vi_write(Vi_SessionSynthe_1, "*IDN?", 5, Vi_retcount)
Debug.Print "Vi CMD : " & Vi_CMD & " on Synthé 1 with status code : " & Vi_status
'This is ok : Freq is modify and status =0
Vi_status = Vi_read(Vi_SessionSynthe_1, Vi_Rep, 1024, Vi_retcount)
'VB6 Crashes before calling Debug.Print function below
'Debug.Print "Vi read" & Vi_Rep & " on Synthe 1 with status code : " & Vi_status
Vi_close (Vi_SessionSynthe_1)
Debug.Print "Fermeture de la session Synthé. 1 Numéro : " & Vi_SessionSynthe_1 & " with status : " & Vi_status
Vi_close (Vi_RMSession)
Debug.Print "Fermeture du Ressource Manager Numéro : " & Vi_RMSession & " with status code : " & Vi_status
Debug.Print "************ All sessions are closed ***************"
End Sub