xk4fu Geschrieben 11. November 2008 Teilen Geschrieben 11. November 2008 hi, für meine exe öffne ich ein pipe um zu testen, ob schon eine läuft, sollte diese nochmal gestartet werden; bei -1 mach ich die zweite halt wieder zu; jetzt möchte ich daten von der zweiten gestarteten exe an die erste übergeben, da ja mit der ersten weitergearbeitet werden muss; dazu möchte ich den bereits gestarteten pipe verwenden, bekomms aber nicht hin ich versuchs mit der API funktion writefile Declare Function WriteFile Lib "kernel32" (ByVal hFile As Integer, ByRef lpBuffer As Object, ByVal nNumberOfBytesToWrite As Integer, ByRef lpNumberOfBytesWritten As Integer, ByRef lpOverlapped As OVERLAPPED) As Integer und readfile Declare Function ReadFile Lib "kernel32" (ByVal hFile As Integer, ByRef lpBuffer As Object, ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByRef lpOverlapped As OVERLAPPED) As Integer aber beim writefile bekomm ich nur 0 zurück und bei writtenfile auch nur 0; das handle hat einen korrekten wert; woran könnte das scheitern? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 11. November 2008 Autor Teilen Geschrieben 11. November 2008 (bearbeitet) Public Declare Function WriteFile Lib "kernel32" ( _ ByVal hFile As Integer, _ ByRef lpBuffer As Object, _ ByVal nNumberOfBytesToWrite As Integer, _ ByRef lpNumberOfBytesWritten As Integer, _ ByRef lpOverlapped As Integer) As Integer Public Declare Function CreateNamedPipe Lib "kernel32" Alias "CreateNamedPipeA" ( _ ByVal lpName As String, _ ByVal dwOpenMode As Int32, _ ByVal dwPipeMode As Int32, _ ByVal nMaxInstances As Int32, _ ByVal nOutBufferSize As Int32, _ ByVal nInBufferSize As Int32, _ ByVal nDefaultTimeOut As Int32, _ ByVal lpSecurityAttributes As Int32) As Int32 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim lret As Integer = CreateNamedPipe("\\.\pipe\joho", 3, 0, _ 1, 2048, 2048, 100, 0) Dim written As Integer Dim bByte As Byte() = System.Text.Encoding.Unicode.GetBytes("Hello from client") Dim ret As Integer = WriteFile(lret, bByte, UBound(bByte), written, 0) End Sub Bearbeitet 11. November 2008 von xk4fu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. November 2008 Teilen Geschrieben 11. November 2008 Die "Gegenseite" der Pipe öffnet man mit CreateFile. Mit CreateNamedPipe kannst du nur neue erstellen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 11. November 2008 Autor Teilen Geschrieben 11. November 2008 (bearbeitet) ok merci schonmal, jetzt hab ich mein handle vom createfile und das steck ich jetzt ins writefile? weil da kommt wieder 0 zurück und bei written auch wieder 0 Dim retcf As Integer = CreateFile( _ "\\.\pipe\joho", _ GENERIC_READ, _ FILE_SHARE_READ Or FILE_SHARE_WRITE, _ 0, _ OPEN_EXISTING, _ FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_NO_BUFFERING, _ 0) Dim ret As Integer = WriteFile(retcf, bByte, UBound(bByte), written, 0) edit: habs: statt GENERIC_READ --> GENERIC_WRITE Bearbeitet 11. November 2008 von xk4fu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 11. November 2008 Autor Teilen Geschrieben 11. November 2008 also das lesen funzt nu wieder ned Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim lret As Integer = CreateNamedPipe("\\.\pipe\joho", 3, 0, _ 1, 2048, 2048, 100, 0) Dim written As Integer Dim s As SECURITY_ATTRIBUTES Dim bByte As Byte() = System.Text.Encoding.Unicode.GetBytes("Hello from client") Dim retcf As Integer = CreateFile( _ "\\.\pipe\joho", _ GENERIC_WRITE, _ FILE_SHARE_READ Or FILE_SHARE_WRITE, _ 0, _ OPEN_EXISTING, _ FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_NO_BUFFERING, _ 0) Dim ret As Integer = WriteFile(retcf, bByte, UBound(bByte), written, 0) Dim bByteR(34) As Byte Dim readen As Integer Dim retr = ReadFile(lret, bByteR, 34, readen, 0) End Sub im retr steht 1, also hats geklappt, im readen 33, ist auch in ordnung nur im bbyter stehehn nur 0er drin und btw: woher weis ich denn, wieviel ich lesen muss? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 11. November 2008 Autor Teilen Geschrieben 11. November 2008 also die laenge des zu lesenden byte arrays hab ich herausgefunden, das nix drin steht, leider noch nicht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 12. November 2008 Autor Teilen Geschrieben 12. November 2008 weis keiner, warum ich aus dem readfile nix zurückbekomme, obwohl die notwendigen zeilen gelesen werden? Public Declare Function WriteFile Lib "kernel32" ( _ ByVal hFile As Integer, _ ByRef lpBuffer As Object, _ ByVal nNumberOfBytesToWrite As Integer, _ ByRef lpNumberOfBytesWritten As Integer, _ ByRef lpOverlapped As Integer) As Integer Declare Function ReadFile Lib "kernel32" ( _ ByVal hFile As Integer, _ ByRef lpBuffer As Object, _ ByVal nNumberOfBytesToRead As Integer, _ ByRef lpNumberOfBytesRead As Integer, _ ByRef lpOverlapped As Integer) As Integer Public Declare Function CreateNamedPipe Lib "kernel32" Alias "CreateNamedPipeA" ( _ ByVal lpName As String, _ ByVal dwOpenMode As Int32, _ ByVal dwPipeMode As Int32, _ ByVal nMaxInstances As Int32, _ ByVal nOutBufferSize As Int32, _ ByVal nInBufferSize As Int32, _ ByVal nDefaultTimeOut As Int32, _ ByVal lpSecurityAttributes As Int32) As Int32 Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _ ByVal lpFileName As String, _ ByVal dwDesiredAccess As Integer, _ ByVal dwShareMode As Integer, _ ByRef lpSecurityAttributes As Integer, _ ByVal dwCreationDisposition As Integer, _ ByVal dwFlagsAndAttributes As Integer, _ ByVal hTemplateFile As Integer) As Integer Private Declare Function GetFileSize Lib "kernel32" ( _ ByVal hFile As Integer, _ ByRef lpFileSizeHigh As Integer) As Integer Private Declare Function CloseHandle Lib "kernel32" ( _ ByVal hObject As Integer) As Integer Private Declare Function SetFilePointer Lib "kernel32" _ (ByVal hFile As Integer, ByVal lDistanceToMove As Integer, _ ByVal lpDistanceToMoveHigh As Integer, _ ByVal dwMoveMethod As Integer) As Integer Private Declare Function SetEndOfFile Lib "kernel32" _ (ByVal hFile As Integer) As Integer Const GENERIC_READ = &H80000000 Const GENERIC_WRITE = &H40000000 Const FILE_SHARE_READ = &H1 Const FILE_SHARE_WRITE = &H2 Const CREATE_ALWAYS = 2 Const CREATE_NEW = 1 Const OPEN_ALWAYS = 4 Const OPEN_EXISTING = 3 Const TRUNCATE_EXISTING = 5 Const FILE_ATTRIBUTE_ARCHIVE = &H20 Const FILE_ATTRIBUTE_HIDDEN = &H2 Const FILE_ATTRIBUTE_NORMAL = &H80 Const FILE_ATTRIBUTE_READONLY = &H1 Const FILE_ATTRIBUTE_SYSTEM = &H4 Const FILE_FLAG_DELETE_ON_CLOSE = &H4000000 Const FILE_FLAG_NO_BUFFERING = &H20000000 Const FILE_FLAG_OVERLAPPED = &H40000000 Const FILE_FLAG_POSIX_SEMANTICS = &H1000000 Const FILE_FLAG_RANDOM_ACCESS = &H10000000 Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000 Const FILE_FLAG_WRITE_THROUGH = &H80000000 Const MOVEFILE_REPLACE_EXISTING = &H1 Const FILE_ATTRIBUTE_TEMPORARY = &H100 Const FILE_BEGIN = 0 Structure SECURITY_ATTRIBUTES Dim nLength As Integer Dim lpSecurityDescriptor As Integer Dim bInheritHandle As Integer End Structure Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '#### EXE 1 #### '#################################################################### Dim hPipe As Integer = CreateNamedPipe("\\.\pipe\joho", 3, 0, _ 1, 2048, 2048, 100, 0) '#################################################################### '#### EXE 2 #### '#################################################################### If CreateNamedPipe("\\.\pipe\joho", 3, 0, _ 1, 2048, 2048, 100, 0) = -1 Then Dim written As Integer Dim s As SECURITY_ATTRIBUTES Dim bByte As Byte() = System.Text.Encoding.Unicode.GetBytes("4711") Dim hFile As Integer = CreateFile( _ "\\.\pipe\joho", _ GENERIC_WRITE, _ FILE_SHARE_READ Or FILE_SHARE_WRITE, _ 0, _ OPEN_EXISTING, _ FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_NO_BUFFERING, _ 0) Dim iLowF As Int64 = 0 Dim iHighF As Int64 = 0 Dim lRetFPFile = SetFilePointer(hFile, iLowF, iHighF, FILE_BEGIN) Dim ret As Integer = WriteFile( _ hFile, _ bByte, _ UBound(bByte), _ written, _ 0) CloseHandle(hFile) 'SetEndOfFile(hFile) End If '#################################################################### '#### EXE 1 #### '#################################################################### Dim readen As Integer Dim nSize As Integer = GetFileSize( _ hPipe, _ 0) Dim bByteR(nSize) As Byte Dim iLow As Int64 = 0 Dim iHigh As Int64 = 0 Dim lRetFP = SetFilePointer(hPipe, iLow, iHigh, FILE_BEGIN) Dim lReadReturn = ReadFile(hPipe, bByteR, nSize, readen, 0) Dim sText = System.Text.Encoding.Unicode.GetString(bByteR) '#################################################################### End Sub Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 12. November 2008 Teilen Geschrieben 12. November 2008 Die Verwendung von GetFileSize und SetFilePointer kommt mir komisch vor. Um festzustellen, ob Daten zum Lesen da sind, gibt es PeekNamedPipe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 12. November 2008 Autor Teilen Geschrieben 12. November 2008 habs jetzt herausgefunden: es lag am object im read- und writefile das byref und object nehm ich nun byval und nen byte array und schon klappts wunderbar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.