public static unsafe void ExecInClientDLL(int nOpc, byte *cStrInput, byte *cStrReturn, int nRetMaxSize) { string ret = ""; // --- StringPtr strInput = new StringPtr(cStrInput); // entrada StringPtr strReturn = new StringPtr(); // retorno try { var json = JObject.Parse(strInput.toString()); var impressora = json["impressora"].ToString(); // nome da impressora var arquivoEtiqueta = json["arquivoEtiqueta"].ToString(); // arquivo a ser interpretado var conteudoArquivo = removerComecoArquivo( File.ReadAllText(arquivoEtiqueta) ); // substitui as macros pelos valores JObject campos = (JObject)json["campos"]; foreach (JProperty j in campos.Properties()) { var campo = "%" + j.Name + "%"; var valor = j.Value.ToString(); conteudoArquivo = conteudoArquivo.Replace(campo, valor); } // se a impressora não foi // especificada, ignora a impressão if (impressora.Length != 0) { var sufixo = DateTime.Now.ToString("_ddMMyyyyHHmmssffffff"); IPrinter printer = new Printer(); printer.PrintRawStream( impressora, new MemoryStream(Encoding.ASCII.GetBytes(conteudoArquivo)), "EtiquetaZebra" + sufixo ); } // mas retorna uma string // com o código ZPL formatado ret = conteudoArquivo; } catch (Exception e) { ret = "#Erro: " + e.Message; } // cria o buffer if (ret.Length > nRetMaxSize) { strReturn.fromString(ret.Substring(0, nRetMaxSize)); } else { strReturn.fromString(ret); } // copia buffer p/ retornar strReturn.copyTo(cStrReturn); }
static unsafe void Main(string[] args) { var cStrInput = new StringPtr(); var cStrReturn = new StringPtr(); cStrInput.fromString( @"{ ""impressora"": ""Generic"", ""arquivoEtiqueta"": ""c:\\temp\\etiqueta.prn"", ""campos"": { ""nf"": ""1234"" } }" ); ProtheusDll.ExecInClientDLL(0, cStrInput.getPtr(), cStrReturn.getPtr(), 20000); //Console.WriteLine(cStrReturn.toString()); //Console.ReadKey(); }