Hallo Leute,
ich brauche wiedermal Eure Hilfe, mit folgender Funktion.
Function EVI_Aufruf(Typ As String, Uebergabesatz As String) As Boolean
Const FktName As String = "EVI_Aufruf"
Static hReadStdout As Long ' STDOUT
Dim hWriteStdout As Long ' STDOUT
Dim hReadStdin As Long ' STDIN
Static hWriteStdin As Long ' STDIN
Dim cmdline As String
Dim bytewritten As Long
Dim StuffToWrite As String
Dim SAInfo 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 im Test
Dim DateiNr As Integer
Dim Zeile As String
Dim Neu As Boolean
On Error GoTo EVI_Aufruf_Fehler
EVI_Aufruf = True
sa.nLength = Len(sa)
sa.lpSecurityDescriptor = 0&
sa.bInheritHandle = 1&
If OpenProcess(PROCESS_ALL_ACCESS, 0&, JavaProcID) = 0 Then
' A pipe of redirection of STDOUT
If CreatePipe(hReadStdout, hWriteStdout, sa, 0&) = 0 Then
Err.Raise vbObjectError + 1, FktName, "Konnte Pipe STDOUT nicht öffnen: " _
& GetWinError()
End If
' A pipe of redirection of STDIN
If CreatePipe(hReadStdin, hWriteStdin, sa, 0&) = 0 Then
Err.Raise vbObjectError + 1, FktName, "Konnte Pipe STDIN nicht öffnen: " _
& GetWinError()
End If
SAInfo.cb = Len(SAInfo)
SAInfo.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
SAInfo.hStdOutput = hWriteStdout
SAInfo.hStdError = hWriteStdout
SAInfo.hStdInput = hReadStdin
SAInfo.wShowWindow = SW_NORMAL
' Programmaufruf über die Beanshell
cmdline = "javaw.exe -Xmx256m -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&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, _
SAInfo, pi) = 0 Then
Err.Raise vbObjectError + 1, FktName, "EVI-VIEWER (" & cmdline & ")" & _
"konnte nicht gestartet werden: " & GetWinError()
End If
CloseHandle hWriteStdout
JavaProcID = pi.dwProcessId
End If
If gBlnTest Then ' Testparameter
' JADICE.LOG ist eine Kontrolldatei, in der die über die Pipe geschickten
' Anweisungen und deren Länge zurückgeschrieben werden
Neu = True
DateiNr = FreeFile
Open "D:\JADICE.LOG" For Output Access Write Lock Read As #DateiNr
End If
' 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 weiter im Folgebeitrag |