DLL SAT e VB6

Espaço destinado a assuntos relativos ao SAT Urano.

DLL SAT e VB6

Mensagempor klinger » Ter Mai 19, 2015 03:44

Olá,

Declararei duas funçoes da dll assim no VB6:
Public Declare Function AtivarSAT Lib "SAT.dll" (ByVal nSeq As Integer, ByVal Tipo As Integer, ByVal Snh As String, ByVal CNPJ As String, ByVal UF As Integer) As String
Public Declare Function EnviarDadosVenda Lib "SAT.dll" (ByVal nSeq As Integer, ByVal Snh As String, ByVal Dados As String) As String

Ao chamar a AtivarSAT recebo o erro:

Run-Time error '49':
Bad Dll Calling convention

Alguma sugestão?

Obrigado,

Klinger
klinger
 
Mensagens: 9
Registrado em: Ter Mai 19, 2015 03:32

Re: DLL SAT e VB6

Mensagempor Suporte SAT » Qua Mai 20, 2015 11:37

Poderia testar se a biblioteca que está em anexo na mensagem resolve o problema relatado?
Anexos
DLL_SAT_windows.zip
DLL Windows teste VB
(190.97 KiB) Baixado 2784 vezes
Suporte SAT
 
Mensagens: 297
Registrado em: Qui Abr 16, 2015 10:40

Re: DLL SAT e VB6

Mensagempor klinger » Qua Mai 20, 2015 02:04

Agora dá crash no VB.
Mais alguma sugestão, estamos sem tempo.

Obrigado,

Klinger
klinger
 
Mensagens: 9
Registrado em: Ter Mai 19, 2015 03:32

Re: DLL SAT e VB6

Mensagempor klinger » Qua Mai 20, 2015 03:49

No VB a calling convention padrão para carregar uma dll é o Stdcall e não cdecl, ou seja, teria que ter uma dll compila p/stdcall.

Obrigado,

Klinger
klinger
 
Mensagens: 9
Registrado em: Ter Mai 19, 2015 03:32

Re: DLL SAT e VB6

Mensagempor Suporte SAT » Qua Mai 20, 2015 05:14

Essa versão no anexo da mensagem anterior foi compilada para stdcall.
Eu reparei que o retorno da função está como String, a DLL tendo sido desenvolvida em C, retorna um ponteiro para um vetor de chars, não seria necessário fazer algum tipo de conversão desses tipos?
Suporte SAT
 
Mensagens: 297
Registrado em: Qui Abr 16, 2015 10:40

Re: DLL SAT e VB6

Mensagempor Suporte SAT » Qui Mai 21, 2015 08:38

Usando a DLL no anexo da primeira resposta eu fiz um teste com o código abaixo:

Código: Selecionar todos
Imports System.Runtime.InteropServices

Module Module1

    Public Declare Function ConsultarSAT Lib "SAT.dll" (ByVal nSeq As Integer) As IntPtr
    Public Declare Function DesbloquearSAT Lib "SAT.dll" (ByVal nSeq As Integer, ByVal codigoDeAtivacao As String) As IntPtr

    Sub Main()
        Dim sOut As String

        sOut = Marshal.PtrToStringAnsi(ConsultarSAT(1234))
        Console.WriteLine(sOut)

        sOut = Marshal.PtrToStringAnsi(DesbloquearSAT(454646, "icc12345"))
        Console.WriteLine(sOut)
    End Sub

End Module


Consegui enviar e receber com sucesso a resposta de ambos os comandos, poderia fazer o teste se alterar o tipo de retorno para IntPtr e converter esse retorno para string resolve?
É necessário usar a DLL em anexo na primeira resposta.
Suporte SAT
 
Mensagens: 297
Registrado em: Qui Abr 16, 2015 10:40

Re: DLL SAT e VB6

Mensagempor klinger » Sex Jul 03, 2015 03:10

O seu teste não foi com VB6, foi com vb.net

Obrigado,

Klinger
klinger
 
Mensagens: 9
Registrado em: Ter Mai 19, 2015 03:32


Voltar para SAT Urano

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes

cron