R
RobZahra
I'm trying to make a VBA function in Excel which, given a unix command,
connects to a server I have created, runs the command, and then returns
the output. I have already written the server.
Example: A cell formula =UnixRun("echo hi") should have a value of
"hi".
Problem: My code (pasted below) works fine when I place a breakpoint at
the line "Do", then hit F5 to continue immediately after arriving
there. But if I run the code directly without a breakpoint, no data
ever comes through. I considered that the breakpoint may be allowing a
delay for the winsock object to start returning data, but even if I
enter a 3 second delay at the exact same point in the code as the break
point, still no data comes through. Therefore, I think the problem is
in the Winsock object. Any ideas to get around this? thx
Code:
If m_objWS.State = sckConnected Or m_objWS.State = sckOpen Then
m_objWS.SendData command & Chr(10)
DoEvents
' *** If I place the breakpoint on the next line, it works
' *** Without the break point, errCount increments to 100,000
' *** Adding in a 3 second wait instead of the
' *** breakpoint also fails.
Do
DoEvents
' first 4 bytes return a code for the #
' # of bytes to expect in this packet
m_objWS.PeekData output, vbString, 4
If (Len(output) >= 4) Then
m_objWS.GetData output, vbString, 4
sizePacket = interpret_code(output)
m_objWS.GetData output, vbString, sizePacket
totalOutput = totalOutput & output
Else
' loop in case data hasn't arrived
sizePacket = 1
errCount = errCount + 1
End If
Loop While sizePacket > 0 And errCount < 100000
connects to a server I have created, runs the command, and then returns
the output. I have already written the server.
Example: A cell formula =UnixRun("echo hi") should have a value of
"hi".
Problem: My code (pasted below) works fine when I place a breakpoint at
the line "Do", then hit F5 to continue immediately after arriving
there. But if I run the code directly without a breakpoint, no data
ever comes through. I considered that the breakpoint may be allowing a
delay for the winsock object to start returning data, but even if I
enter a 3 second delay at the exact same point in the code as the break
point, still no data comes through. Therefore, I think the problem is
in the Winsock object. Any ideas to get around this? thx
Code:
If m_objWS.State = sckConnected Or m_objWS.State = sckOpen Then
m_objWS.SendData command & Chr(10)
DoEvents
' *** If I place the breakpoint on the next line, it works
' *** Without the break point, errCount increments to 100,000
' *** Adding in a 3 second wait instead of the
' *** breakpoint also fails.
Do
DoEvents
' first 4 bytes return a code for the #
' # of bytes to expect in this packet
m_objWS.PeekData output, vbString, 4
If (Len(output) >= 4) Then
m_objWS.GetData output, vbString, 4
sizePacket = interpret_code(output)
m_objWS.GetData output, vbString, sizePacket
totalOutput = totalOutput & output
Else
' loop in case data hasn't arrived
sizePacket = 1
errCount = errCount + 1
End If
Loop While sizePacket > 0 And errCount < 100000