Boa noite engenheiros
Esta noite vou finalmente conseguir dormir porque encontrei a solução. O problema é que a SAT.DLL foi construída em C e o tratamento de tamanhos e endereçamento de variáveis do C é diferente daquele utilizado pelo .NET. Por isso é necessário obter o retorno da chamada da função através do endereçamento de memória da variável e não da variável propriamente dita. Para isto é preciso utilizar um ponteiro. Fiz da seguinte forma caso alguém precise?
Vinculação da DLL dentro da classe pelo PInvoke:
<DllImport("c:\SAT\SAT.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Function ConsultarSAT(ByVal nSessionRandom As Int32) As IntPtr
End Function
Chamada da função e leitura do resultado na memória:
Dim cmdLineStr As IntPtr = ConsultarSAT(Sessao)
Dim strResposta As String = Marshal.PtrToStringAnsi(cmdLineStr)
MsgBox(strResposta)
Agora esta funfando legal e estou indo em frente até o próximo buraco, obrigado a todos que tentaram ajudar.
Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.