Strings verbinden geht nicht ??

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Rikudo.

    ~blaze~ schrieb:

    Ich glaube außerdem, dass es wirklich an der Nullterminierung liegt.
    @Rikudo:: Die Strings müssen dann entsprechend geMarshalt werden, das ist ein wenig tricky.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Artentus schrieb:


    Man kann bei GetWindow Text auch einen StringBuilder statt nem String nehmen, der muss nicht vorreserviert werden und kommt auch mit dem Nullchar klar.

    Also, das habe ich auch schon versucht. Wenn ich diese Art der Deklaration:

    VB.NET-Quellcode

    1. Public Declare Auto Function GetWindowText Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal lpString As String, ByVal cch As IntPtr) As IntPtr


    mal umschreibe in diese Art:

    VB.NET-Quellcode

    1. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    2. Public Function GetWindowText(hwnd As IntPtr, <MarshalAs(UnManagedType.LPStr)>lpString As System.Text.StringBuilder, cch As Integer) As Integer
    3. End Function


    Dann meckert er rum, und zwar hier:

    VB.NET-Quellcode

    1. Public Shared Function GetWindowtitle(ByVal hwnd As IntPtr) As String
    2. Dim Text As String = New String(Chr(0), Short.MaxValue)
    3. GetWindowText(hwnd, Text, Int16.MaxValue) ' <-- Hier wird 'text' unterkringelt...
    4. Return Text.TrimEnd(Chr(0))
    5. End Function


    Da heißt es dann das der Typ String nicht in System.Text.StringBuilder konvertiert werden kann, wie schreibe ich das entsprechend um?
    C# Developer
    Learning C++

    Rikudo schrieb:

    Dann meckert er rum, und zwar hier:
    Ja und?

    RodFromGermany schrieb:

    Die Strings müssen dann entsprechend geMarshalt werden, das ist ein wenig tricky.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Artentus schrieb:

    Man kann bei GetWindow Text auch einen StringBuilder statt nem String nehmen, der muss nicht vorreserviert werden und kommt auch mit dem Nullchar klar.


    Habs:

    VB.NET-Quellcode

    1. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    2. Public Shared Function GetWindowText(hwnd As IntPtr, <MarshalAs(UnmanagedType.LPStr)> lpString As System.Text.StringBuilder, cch As Integer) As Integer
    3. End Function
    4. Function GetWindowTitle(hwnd as IntPtr) as String
    5. Dim txt as new System.Text.Stringbuilder
    6. Getwindowtext(hwnd, txt, Int16.maxvalue)
    7. Return txt.tostring
    8. End function
    C# Developer
    Learning C++