-
Total de ítens
4 -
Registro em
-
Última visita
Últimos Visitantes
848 visualizações
ricaalm's Achievements
-
Amigos Uma dúvida que tenho é com relação a função AtivarSAT. Pelo que verifiquei na documentação do SEFAZ, esta função não será de responsabilidade do meu AC, mas sim será disponibilizada pelo fabricando do S@T. Desta forma não preciso me preocupar em implementar esta função em meu AC. Meu intendimento esta correto ?
-
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.
-
Pois é Rafael, eu já tentei definir desta forma também mas dá o mesmo erro: <DllImport("C:\SAT\SAT.DLL", CallingConvention:=CallingConvention.StdCall)> _ Public Function ConsultarSAT(ByRef numeroSessao As Integer) As String End Function
-
Bom dia engenheiros Peço desculpa caso esteja postando em forum errado. Estou iniciando um projeto de um aplicativo comercial que ira trabalhar com o S@T. Já há alguns dias estou queimando a pestana na tentativa de comunicar meu aplicativo com a SAT.DLL disponibilizada para testes pelo SEFAZ. Meu aplicativo esta sendo desenvolvido em VB.NET. Ao acionar a DLL recebo o seguinte erro: "Uma chamada para a função PInvoke 'TesteAcessoSAT!TesteAcessoSAT.Module1::ConsultarSAT' desbalanceou a pilha. Isso ocorreu provavelmente porque a assinatura gerenciada de PInvoke não corresponde à assinatura de destino não gerenciada. Verifique se a convenção e o parâmetro de chamada da assinatura de PInvoke são iguais aos da assinatura não gerenciada de destino." O código que fiz para teste é bastante simples, criei um modulo e defini a DLL conforme abaixo: Module SAT Public Declare Ansi Function myConsultarSAT Lib "C:\SAT\SAT.DLL" Alias "ConsultarSAT" (ByVal numeroSessao As Integer) As String End Module Em seguida, criei um código para acessar esta DLL como segue: Public Sub Main() Dim strRetorno As String Dim Randomizer As New Random Dim Sessao As Integer Sessao = Randomizer.Next(1, 1000000) Try strRetorno = myConsultarSAT(Sessao) Catch ex As Exception MsgBox(ex.Message) End Try End Sub Ao executar verifico que a chamada até é feita pois aparece no log do emulador do SEFAZ, mas o erro que informei é demonstrado na tela e nenhum valor retorna para meu aplicativo. alguém já passou por isso ou tem alguma dica ? Já procurei em diversos forums e sites especializados e atá agora não encontrei nada que pudesse me ajudar. Fico imensamente grato caso alguém possa me auxiliar.