Boa Tarde.
Tentei fazer um conceito de app, para apenas testar a comunicação do AC com o SAT por enquanto, em c#. O código todo é:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
//
[DllImport("C:\\SAT\\SAT_32.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern string ConsultarSAT(int numeroSessao);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string resultados = ConsultarSAT(GerarNumSessao());
MessageBox.Show(resultados);
}
}
}
Onde “GerarNumSessao()” é um simples método que gera um Int32 de 6 dígitos semi-aleatório baseado na hora atual do computador.
Ao compilar para x86 e usar a dll 32 bits, recebo o erro:
Managed Debugging Assistant ‘PInvokeStackImbalance’ : ‘Uma chamada para a função PInvoke ‘WindowsFormsApp1!WindowsFormsApp1.Form1::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.’
Ao compilar em x64 e usar a dll 64 bits, recebo:
Unhandled exception at 0x00000000777CF3E2 (ntdll.dll) in WindowsFormsApp1.exe: 0xC0000374: Um heap foi corrompido (parameters: 0x0000000077848430).
O código roda lisinho no emulador de sat fornecido pela SeFaz, mas no SDK só dá esses erros. Alguém tem alguma luz?