Boa Tarde, Carlos
Desculpe, não havia mais acessado o forum.
Declare uma classe assim:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
static class NativeMethods
{
[DllImport(“kernel32.dll”)]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport(“kernel32.dll”)]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport(“kernel32.dll”)]
public static extern bool FreeLibrary(IntPtr hModule);
}
na sua classe de implementação:
static IntPtr dllHandle;
//
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate IntPtr ConsultarStatusOperacional(int numeroSessao, [MarshalAs(UnmanagedType.LPStr)] string codigoDeAtivacao);
//
e na sua lógica:
string strSATDLL_PARAMETRIZADO = “SAT_OUTRO.dll”;
string strSATDLL = string.Empty;
if (strMsg.ToLower().Equals(“tanca”))
{
strSATDLL = “SAT.dll”;
}
else
{
strSATDLL = strSATDLL_PARAMETRIZADO;
}
IntPtr ptr = NativeMethods.LoadLibrary(strSATDLL);
IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(ptr, “ConsultarStatusOperacional”);
ConsultarStatusOperacional consultaSat = (ConsultarStatusOperacional)Marshal.GetDelegateForFunctionPointer(
pAddressOfFunctionToCall,
typeof(ConsultarStatusOperacional));
strStatus = Marshal.PtrToStringAnsi(consultaSat(iNumeroSessaoAC, strCodigoAtivacao));
A condição acima, é logica de exemplo. É obvio que sua intenção é parametrizar a chamada.
Mas, embora o Sefaz tenha recomendado a padronização da Sat.dll, os fabricantes seguiram a especificação somente nos entrypoints da mesma ( metodos ). Mas, na definição dos parametros destes metodos, o seguiram somente em quantidade de parametros, não em sua especificação. Assim, o numero da sessão é inteiro para um fabricante, em outro, deve ser passado como string, mas em seu conteudo como inteiro. Desta forma, voce ate consegue parametrizar a dll de chamada, mas deve tomar cuidado com a passagem dos parametros ao metodo chamado.
Se ajudou, propague, se tiver uma solução, auxilie, propague, divulgue.
ATT
Rodrigo