Zum Inhalt springen

In NamedPipe Schreiben


xk4fu

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

    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 von xk4fu
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von xk4fu
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...