vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Pipe beschicken 
Autor: BasTler
Datum: 08.04.05 13:54

Hallo an Alle,

wer hat schonmal von VB aus, in andere Programme etwas über eine Pipe geschrieben?
Habe folgendes Problem(Code folgt, wenn nicht zu lang )
Private Sub Command1_Click()
  Dim I As Long
  Dim ret As Long
  Dim hErrRead As Long
  Dim hErrWrite As Long
  Dim hReadPipe1 As Long   ' STDOUT
  Dim hWritePipe1 As Long  ' STDOUT
  Dim hReadPipe2 As Long   ' STDERR
  Dim hWritePipe2 As Long  ' STDERR
  Dim hReadPipe3 As Long   ' STDIN
  Dim hWritePipe3 As Long  ' STDIN
  Dim bytewritten As Long
  Dim cmdline As String
  Dim StuffToWrite As String
  Dim start As STARTUPINFO
  Dim proc As PROCESS_INFORMATION
 
  ' A pipe of redirection of STDOUT
  ret = CreatePipe(hReadPipe1, hWritePipe1, 0&, 0&)
  If ret = 0 Then MsgBox "Konnte Pipe STDOUT nicht öffnen: " & Err.LastDllError
 
  ' A pipe of redirection of STDERR
  ret = CreatePipe(hReadPipe2, hWritePipe2, 0&, 0&)
  If ret = 0 Then MsgBox "Konnte Pipe STDERR nicht öffnen: " & Err.LastDllError
 
  ' A pipe of redirection of STDIN
  ret = CreatePipe(hReadPipe3, hWritePipe3, 0&, 0&)
  If ret = 0 Then MsgBox "Konnte Pipe STDIN nicht öffnen: " & Err.LastDllError
 
  start.cb = Len(start)
  'start.dwFlags = STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW
  'start.dwFlags = STARTF_USESTDHANDLES
  start.hStdOutput = hWritePipe1
  start.hStdError = hWritePipe2
  start.hStdInput = hReadPipe3
 
  cmdline$ = "java -cp c:\programme\jet\bin\bsh-1.3.0.jar bsh.Interpreter"
  'cmdline$ = "D:\VC\VC.COM"
 
  ret = CreateProcess(0&, cmdline$, 0&, 0&, True, &H20, 0&, 0&, start, proc)
  If ret = 0 Then
     MsgBox "Anwendung kann nicht gestartet werden: " & Err.LastDllError, _
       vbCritical, "BeanShell 1.3"
  End If
 
  ' Folgende Übergaben müssen nacheinander in einer Schleife abgearbeitet werden
  For I = 1 To 4
    DoEvents
    Select Case I
    Case 1
      StuffToWrite = "JFrame frame = new JFrame();" & Chr$(13)
    Case 2
      StuffToWrite = "frame.setSize(200,200);" & Chr$(13)
    Case 3
      StuffToWrite = "frame.show();" & Chr$(13)
    Case 4
      StuffToWrite = "frame.toFront();" & Chr$(13)
    End Select
    ' Send it.
    ret = WriteFile(hWritePipe3, StuffToWrite, Len(StuffToWrite), bytewritten, _
      CLng(0))
    If ret = 0 Then
      MsgBox "Anwendung wurde nicht beschrieben: " & Err.LastDllError
    Else
      MsgBox "Anzahl übergebene Zeichen: " & bytewritten
    End If
  Next I
 
  ret = TerminateProcess(proc.hProcess, 0&)
  If ret = 0 Then
    MsgBox "Process wurde nicht ordnungsgemäß beendet: " & Err.LastDllError
  End If
 
  CloseHandle hReadPipe1
  CloseHandle hWritePipe1
  CloseHandle hReadPipe3
  CloseHandle hWritePipe3
 
End Sub
Die API's habe ich in einem Modul drin und hier jetzt weggelassen.

Die Anwendung BeanShell wird nur gestartet, wenn ich dwFlags auf '0' lasse, d.h. keinen Wert wie "STARTF_USESTDHANDLES" zuweise, ich weiß aber nicht ob dann auch StdIn, StdOut und StdErr benutzt werden.
Es sollen die 4 Anweisungen an die BeanShell geschickt und da verarbeitet werden.
Es kommt auch immer ret <> 0 zurück, aber es passiert nix. Normal sollte sich ein neues Fenster öffnen.
Jetzt die Fragen, ist StdInput vom richtigen Handle befüllt und wird dann auch das richte Ende der Pipe in der WriteFile-Funktion angesprochen?
Muß ich mehrere Pipe's createn, obwohl ich nur StdIN brauche?
Brauche ich die StdErr und wann muß ich den CloseHandle ausführen?
Oder gibt es was anderes ???

Vielen Dank im Voraus
BasTler
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Pipe beschicken2.493BasTler08.04.05 13:54
Re: Pipe beschicken1.040BasTler11.04.05 13:19
Re: Pipe beschicken903BugMeNot24.04.05 13:57
Re: Pipe beschicken913BugMeNot24.04.05 15:54
Re: Pipe beschicken916brave@heart25.04.05 01:15
Re: Pipe beschicken900BasTler25.04.05 15:16
Re: Pipe beschicken974BasTler25.04.05 08:57
Re: Pipe beschicken926BugMeNot25.04.05 09:17
Re: Pipe beschicken1.080Mr. Fox25.04.05 17:42
Re: Pipe beschicken850BasTler26.04.05 08:54
Re: Pipe beschicken827Mr. Fox26.04.05 09:05
Re: Pipe beschicken894BasTler26.04.05 14:36
Re: Pipe beschicken895BasTler26.04.05 14:37
Re: Pipe beschicken993Mr. Fox26.04.05 15:11
Re: Pipe beschicken798BasTler26.04.05 15:48
Re: Pipe beschicken818Mr. Fox26.04.05 18:20
Re: Pipe beschicken893BasTler27.04.05 10:32
Re: Pipe beschicken844Mr. Fox27.04.05 21:12
Re: Pipe beschicken803BasTler28.04.05 08:50
Re: Pipe beschicken863BasTler28.04.05 15:15
Re: Pipe beschicken796Mr. Fox28.04.05 17:44
Re: Pipe beschicken800BasTler29.04.05 14:48
Re: Pipe beschicken1.348BasTler29.04.05 14:51
Lösung1.057BasTler24.05.05 16:43
Re: Lösung849Mr. Fox26.05.05 10:13
Re: Lösung850BasTler27.05.05 12:47
Re: Pipe beschicken830Blacky08.05.05 23:49
Re: Pipe beschicken799BasTler09.05.05 14:51

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel