Fórum Tanca Fóruns SAT Fiscal TS-1000 e SDK-1000 Como declarar a SAT.DLL em vb.net ?

Este tópico contém respostas, possui 3 vozes e foi atualizado pela última vez por  alexandrem 7 anos atrás.

Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #76

    ferdead
    Participante

    tentei assim:

        Public Declare Function AtivarSAT Lib "sat.dll" (numeroSessao As Long, subComando As Integer, codigoDeAtivacao As String, CNPJ As String, cUF As Integer) As String
        Public Declare Function ComunicarCertificadoICPBRASIL Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, certificado As String) As String
        Public Declare Function EnviarDadosVenda Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, dadosVenda As String) As String
        Public Declare Function CancelarUltimaVenda Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, chave As String, dadosCancelamento As String) As String
        Public Declare Function ConsultarSAT Lib "sat.dll" (numeroSessao As Long) As String
        Public Declare Function TesteFimAFim Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, dadosVenda As String) As String
        Public Declare Function ConsultarStatusOperacional Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String) As String
        Public Declare Function ConsultarNumeroSessao Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, cNumeroDeSessao As Long) As String
        Public Declare Function ConfigurarInterfaceRede Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, dadosConfiguracao As String) As String
        Public Declare Function AssociarAssinatura Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, CNPJValue As String, assinaturaCNPJs As String) As String
        Public Declare Function AtualizarSoftwareSAT Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String) As String
        Public Declare Function ExtrairLogs Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String) As String
        Public Declare Function BloquearSAT Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String) As String
        Public Declare Function DesbloquearSAT Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String) As String
        Public Declare Function TrocarCodigoDeAtivacao Lib "sat.dll" (numeroSessao As Long, codigoDeAtivacao As String, opcao As Integer, novoCodigo As String, confNovoCodigo As String) As String
    

    mas ao executar os comandos dá o erro:
    Managed Debugging Assistant ‘PInvokeStackImbalance’ has detected a problem in ‘C:\Users\Fernando\Documents\Visual Studio 2012\Projects\FM Sistemas\FM Sistemas\bin\Debug\FM Sistemas.vshost.exe’.

    Additional Information: A call to PInvoke function ‘FM Sistemas!FM_Sistemas.modVariaveis::ConsultarStatusOperacional’ has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

    vcs podem me ajudar ?

    #78

    Rodrigo R. Muniz
    Participante

    Bom Dia, ferdead

    Eu utilizo C#, e esta funcionando ok, exceto em sistemas com X64, onde a dll apresenta erro. Criei um topico sobre isso, e imagino que minha sugestão, se acatada pelo suporte tecnico da Tanca, deva resolver.
    Em todo caso, se lhe for útil, seguem meus declares em C#, que não são muito difíceis de passar para vb.net

    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string ConsultarStatusOperacional(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string AtivarSAT(int numeroSessao, int subComando, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string CNPJ, int cUF);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string ComunicarCertificadoICPBRASIL(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string certificado);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string EnviarDadosVenda(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string dadosVenda);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string CancelarUltimaVenda(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string chave, [MarshalAs(UnmanagedType.LPStr)] string dadosCancelamento);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string ConsultarSAT(int numeroSessao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string TesteFimAFim(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string dadosVenda);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string ConsultarNumeroSessao(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao, int cNumeroDeSessao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string ConfigurarInterfaceDeRede(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string dadosConfiguracao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string AssociarAssinatura(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string CNPJvalue, // CNPJvalue = Desenvolvedor + Emitente
    [MarshalAs(UnmanagedType.LPStr)] string assinaturaCNPJs);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string AtualizarSoftwareSAT(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string ExtrairLogs(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string BloquearSAT(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string DesbloquearSAT(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao);
    //
    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    private static extern string TrocarCodigoDeAtivacao(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao,
    [MarshalAs(UnmanagedType.LPStr)] string opcao,
    [MarshalAs(UnmanagedType.LPStr)] string novoCodigo,
    [MarshalAs(UnmanagedType.LPStr)] string confNovoCodigo);
    //

    #533

    alexandrem
    Participante

    Fala Rodrigo! Parceiro, o problema do PInvoke mencionado pelo “ferdead” persiste, mesmo usando suas declarações, montei uma simples POC console APP c# e o erro descrito pelo usuário acima, persiste. Alguma ajuda? Versão da DLL 2.0.0.0

    class Program
    {
    static void Main(string[] args)
    {

    var sat = new Tanca();
    var res = sat.ConsultarSAT(new Random().Next(9999));
    Console.WriteLine(res);
    Console.Read();
    }
    }

    public class Tanca
    {

    public string ConsultarSAT(int sessao)
    {
    return Declaracao_Func_SAT.ConsultarSAT(sessao);
    }

    class Declaracao_Func_SAT
    {
    const string strSATDLL = “SAT.DLL”;

    [DllImport(strSATDLL, CallingConvention = CallingConvention.Cdecl)]
    public static extern string ConsultarSAT(int numeroSessao);
    }

    }

    Erro:
    Managed Debugging Assistant ‘PInvokeStackImbalance’ : ‘A call to PInvoke function ‘SatTanc!SatTanc.Tanca+Declaracao_Func_SAT::ConsultarSAT’ has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.’

Visualizando 3 posts - 1 até 3 (de 3 do total)

Você deve fazer login para responder a este tópico.