DLL emulador SAT, fechando aplicação ao ser consumida

Bom dia amigos,

estou usando o emulador do SAT encontrado no site da SEFAZ para testar minha aplicação em C# .NET. Estou com um problema que, quando tento consumir a SAT.dll, todos os métodos importados da DLL por qual minha aplicação passa, ela fecha inesperadamente sem dar catch em nenhum exceção.

 

Estou importando a DLL dessa forma:

[DllImport("dllsat.dll", CallingConvention = CallingConvention.Cdecl)] public static extern string EnviarDadosVenda(int iNumSessao, string pcCodAtivacao, string pcDadosVenda);

No meu método, esta assim:

        public static void enviarDadosCFeToSat()
        {
            try
            {
                var xml = readFileXML();
                int numSessao = gerarNumeroSessao();
                string codAtivacao = "123456789";

                var resposta = EnviarDadosVenda(numSessao, codAtivacao, xml);
            }
            catch 
            {
                throw;
            }
        }

Ao passar pelo método EnviarDadosVenda(x, y, z), a resposta no LOG é:

  Citar

[2019-01-16 11:02:41.619]:Erro: Falha na estrutura do XML de venda.
[2019-01-16 11:02:41.626]:ERRO NA EMISSAO: 1999: null

Entendo que o XML possa estar errado, mas a minha aplicação fecha inesperadamente e não importa qual tratamento que dou, ele não apresenta a exceção. Alguém sabe como implementar de forma que a aplicação não feche? Mesmo os métodos que passam com sucesso pela dll acabam por fechar após chamar a DLL.

 

Grato

 

SOLUÇÃO:

 

Já resolvi! Se puderem fechar o post, agradeço. Se alguém passar por isso no futuro, segue a solução abaixo.

Tive que fazer as seguintes modificações no código:

        [DllImport("dllsat.dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr EnviarDadosVenda(int iNumSessao, string pcCodAtivacao, string pcDadosVenda);

e no meu método:

        public static void enviarDadosCFeToSat()
        {
            try
            {
                readFileXML();
                int numSessao = 2;
                string codAtivacao = "123456789";

                IntPtr ptr = EnviarDadosVenda(numSessao, codAtivacao, xml);
                string s = Marshal.PtrToStringAnsi(ptr);
            }
            catch 
            {
                throw;
            }
        }

Fonte: https://www.projetoacbr.com.br/forum/topic/48771-dll-emulador-sat-fechando-minha-aplica%C3%A7%C3%A3o-ao-ser-consumida/?_fromLogin=1#_=_