Function EVI_Aufruf(Korrsatz As String, WaitForProcess As Boolean) As Boolean
Dim cmdline As String
Dim hReadPipe1 As Long, hWritePipe1 As Long ' STDOUT
Dim hReadPipe3 As Long, hWritePipe3 As Long ' STDIN
Dim bytewritten As Long
Dim llngRetCode As Long, llngReturnStatus As Long
Dim StuffToWrite As String
Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
Dim sa As SECURITY_ATTRIBUTES
' Diese Variablen sind für die Datei mit den JAVA-Anweisungen
Dim JavaScript As Integer
Dim KorrsatzPos As Integer
Dim cmdlineRest As Integer
Dim SbnrPos As Integer
' Diese Variablen sind für eine Protokolldatei
Dim DateiNr As Integer
Dim Zeile As String
On Error GoTo EVI_Aufruf_Fehler
EVI_Aufruf = True
sa.nLength = Len(sa)
sa.lpSecurityDescriptor = 0&
sa.bInheritHandle = True
' Hier wird geprüft, ob die Anwendung schon läuft
If OpenProcess(PROCESS_ALL_ACCESS, 0&, JavaProcID) = 0 Then
' A pipe of redirection of STDOUT
If CreatePipe(hReadPipe1, hWritePipe1, sa, 0&) Then
Else
MsgBox "Konnte Pipe STDOUT nicht öffnen: " & Err.LastDllError
End If
' A pipe of redirection of STDIN
If CreatePipe(hReadPipe3, hWritePipe3, sa, 0&) Then
Else
MsgBox "Konnte Pipe STDIN nicht öffnen: " & Err.LastDllError
End If
si.cb = Len(si)
si.dwflags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
'si.dwFlags = STARTF_USESHOWWINDOW
si.hStdOutput = hWritePipe1
si.hStdError = hWritePipe1
si.hStdInput = hReadPipe3
si.wShowWindow = SW_NORMAL
' Programmaufruf
cmdline = "javaw.exe -Xmx128m -cp "
cmdline = cmdline & "c:\programme\jet\bin\bsh-1.3.0.jar;"
cmdline = cmdline & "c:\programme\jet\bin\JeTClient.jar;"
cmdline = cmdline & "c:\programme\jet\bin\jadice-viewer.jar;"
cmdline = cmdline & "c:\programme\jet\bin\iiclient.jar;"
cmdline = cmdline & "c:\programme\jet\bin\EVIStarter.jar;"
cmdline = cmdline & "c:\programme\jet\bin\commons-httpclient-2.0-rc2.jar;"
cmdline = cmdline & "c:\programme\jet\bin\commons-logging.jar"
cmdline = cmdline & " -Dde.debeka.jet.home=c:\programme\jet"
cmdline = cmdline & " bsh.Interpreter"
If CreateProcess(0&, cmdline$, 0&, 0&, True, NORMAL_PRIORITY_CLASS, 0&, 0&, _
si, pi) Then
Else
MsgBox "EVI konnte nicht gestartet werden !", 16, Title16
End If
JavaProcID = pi.dwProcessId
WritePipe3 = hWritePipe3
Else
pi.dwProcessId = JavaProcID
hWritePipe3 = WritePipe3
End If
' JADICE.LOG ist eine Kontrolldatei, in der die über die Pipe
' geschickten Anweisungen und deren Länge zurückgeschrieben werden
DateiNr = FreeFile
Open "D:\JADICE.LOG" For Output Access Write Lock Read As #DateiNr
' EviScript.txt ist die Datei, in der die über die Pipe zu schickenden
' JAVA-Anweisungen stehen
JavaScript = FreeFile
Open "D:\EviScript.txt" For Binary Access Read As #JavaScript
Do Until EOF(JavaScript)
Line Input #JavaScript, StuffToWrite
DoEvents
If Left$(StuffToWrite, 1) = ";" Then
Else
' Die ersten Übergaben in "StuffToWrite" sind zum Initialisieren des
' Aufruf's
If InStr(1, StuffToWrite, "persnr") Then
KorrsatzPos = InStr(1, StuffToWrite, "persnr") - 1
' hier noch die SBNR in Spalte Abt. einfügen
cmdline = Left$(StuffToWrite, KorrsatzPos) & param.persnr & """" & "" & _
", ""001"", """ & param.sbnr
SbnrPos = InStr(1, StuffToWrite, "BS")
cmdlineRest = Len(StuffToWrite) - ((SbnrPos) + 1)
StuffToWrite = cmdline & "" & Right$(StuffToWrite, cmdlineRest)
End If
If InStr(1, StuffToWrite, "Korrsatz") Then
KorrsatzPos = InStr(1, StuffToWrite, "Korrsatz") - 1
cmdlineRest = Len(StuffToWrite) - (KorrsatzPos + 8)
cmdline = Left$(StuffToWrite, KorrsatzPos) & "" & Korrsatz
cmdline = cmdline & """, " & """" & param.User
StuffToWrite = cmdline & Right$(StuffToWrite, cmdlineRest)
End If
StuffToWrite = StuffToWrite & vbNewLine
' Ausgabe in die andere Anwendung
If WriteFile(hWritePipe3, ByVal StuffToWrite, Len(StuffToWrite), _
bytewritten, 0&) Then
Zeile = StuffToWrite & ";" & bytewritten
Print #DateiNr, Zeile
Else
MsgBox "Pipe für EVI wurde nicht beschrieben.", 16, Title16
End If
End If
Loop
Close #DateiNr
Close #JavaScript
EVI_Aufruf = False
Exit Function
EVI_Aufruf_Fehler:
MsgBox "EVI_Aufruf hat einen Fehler: " & Err
End Function |