AJUDA A ALTERAR CODIGO - PINVOKE
Alguém poderia me ajudar a alterar o código da função abaixo, em especial a esta parte: [Ô]tam = lstrlen(lpString)[Ô] - Pinvoke.
Só esta faltando esta parte para concluir.
Private Declare Function lstrlen Lib [Ô]kernel32[Ô] Alias [Ô]lstrlenA[Ô] (ByVal lpString As Object) As Long
Private Declare Sub CopyMemory Lib [Ô]kernel32[Ô] Alias [Ô]RtlMoveMemory[Ô] (hpvDest As Object, hpvSource As Object, ByVal cbCopy As Long)
Private Declare Function GeraS Lib [Ô]C:\...[Ô] (ByVal CodC As Integer, ByVal CodTipoAto As Integer) As Long
Public Function PtrToStr(ByVal lpString As Long) As String
Dim tam As Long
Dim s As New String(vbNullChar, tam)
tam = lstrlen(lpString)
If (tam > 0) Then
Call CopyMemory(s, lpString, tam)
PtrToStr = s
End If
End Function
Essa função é utilizada neste evento:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim CodC As Integer
Dim CodTipoAto As Integer
sRetorno = PtrToStr(GeraS(CodC, CodTipoAto))
TextBox1.Text = sRetorno
End Sub
Fico no aguardo.
Obrigado,
Atenciosamente,
Carlos.
Só esta faltando esta parte para concluir.
Private Declare Function lstrlen Lib [Ô]kernel32[Ô] Alias [Ô]lstrlenA[Ô] (ByVal lpString As Object) As Long
Private Declare Sub CopyMemory Lib [Ô]kernel32[Ô] Alias [Ô]RtlMoveMemory[Ô] (hpvDest As Object, hpvSource As Object, ByVal cbCopy As Long)
Private Declare Function GeraS Lib [Ô]C:\...[Ô] (ByVal CodC As Integer, ByVal CodTipoAto As Integer) As Long
Public Function PtrToStr(ByVal lpString As Long) As String
Dim tam As Long
Dim s As New String(vbNullChar, tam)
tam = lstrlen(lpString)
If (tam > 0) Then
Call CopyMemory(s, lpString, tam)
PtrToStr = s
End If
End Function
Essa função é utilizada neste evento:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim CodC As Integer
Dim CodTipoAto As Integer
sRetorno = PtrToStr(GeraS(CodC, CodTipoAto))
TextBox1.Text = sRetorno
End Sub
Fico no aguardo.
Obrigado,
Atenciosamente,
Carlos.
Primeiro tu precisa atribuir o valor à variavel TAM para depois criar a variável S.
Testa ai.
Testa ai.
Public Function PtrToStr(ByVal lpString As Long) As String
Dim tam As Long
[ô]
tam = lstrlen(lpString)
[ô]
Dim s As New String(vbNullChar, tam)
If (tam > 0) Then
Call CopyMemory(s, lpString, tam)
PtrToStr = s
End If
End Function
Olá ASHKATCHUP, boa noite!
Infelizmente não funcionou.
Lendo em alguns artigos e posts em alguns fóruns, me indicam utilizar Marshal.PtrToString()
No entanto, não entendi muito bem.
Utilizando a função acima, ele me dá um erro [Ô]Pinvoke Stack Imbalance[Ô].
Fico no aguardo.
Obrigado,
Atenciosamente,
Carlos.
Infelizmente não funcionou.
Lendo em alguns artigos e posts em alguns fóruns, me indicam utilizar Marshal.PtrToString()
No entanto, não entendi muito bem.
Utilizando a função acima, ele me dá um erro [Ô]Pinvoke Stack Imbalance[Ô].
Fico no aguardo.
Obrigado,
Atenciosamente,
Carlos.
Alterando a função acima para IntPtr, e descrevendo a parte do evento, testo assim:
Private Declare Function GeraS Lib [Ô]C:\...[Ô] (ByVal CodC As Integer, ByVal CodTipoAto As Integer) As IntPtr
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim CodC As Integer
Dim CodTipoAto As Integer
sRetorno = Marshal.PtrToStringAuto(GeraS(CodC, CodTipoAto))
TextBox1.Text = sRetorno
End Sub
No entanto o retorno que vem esta errado. Não vem em String.
Acredito que esteja deixando algo de fora, no entanto, não sei o que é. Poderiam me ajudar?
Private Declare Function GeraS Lib [Ô]C:\...[Ô] (ByVal CodC As Integer, ByVal CodTipoAto As Integer) As IntPtr
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim CodC As Integer
Dim CodTipoAto As Integer
sRetorno = Marshal.PtrToStringAuto(GeraS(CodC, CodTipoAto))
TextBox1.Text = sRetorno
End Sub
No entanto o retorno que vem esta errado. Não vem em String.
Acredito que esteja deixando algo de fora, no entanto, não sei o que é. Poderiam me ajudar?
Tenta usar assim:
sRetorno = Marshal.PtrToStringAnsi(GeraS(CodC, CodTipoAto))
Olá ASHKATCHUP, boa noite!
Obrigado, resolveu.
Obrigado, resolveu.
Tópico encerrado , respostas não são mais permitidas