-
Total de ítens
58 -
Registro em
-
Última visita
Tudo que Renan Garcia de Oliveira postou
-
Site da UF da consulta divergente para GO
um tópico no fórum postou Renan Garcia de Oliveira NFC-e - Nota Fiscal do Consumidor Eletrônica
Boa tarde, Gostaria de confirmar uma informação sobre o parâmetro abaixo, que está no arquivo ACBrNFeServicos.ini: URL-ConsultaNFCe_2.00=http://www.sefaz.go.gov.br/nfce/consulta Quando eu utilizo este valor que vem por padrão nos fontes do ACBr e tento enviar uma NFC-e com QRCode na versão 2.0 recebo o seguinte retorno: Endereço do site da UF da Consulta por chave de acesso diverge do previsto Eu consigo autorizar a NFC-e se colocar o mesmo endereço que está no parâmetro da versão 1.0 do QRCode: URL-ConsultaNFCe_1.00=http://www.nfce.go.gov.br/post/ver/214413/consulta-nfc-e-homologacao Essa URL da versão 2.0 vai passar a ser oficial a partir do dia 1 de Outubro, ou está errada mesmo? Porque jogando a URL da 2.0 no navegador sempre sou redirecionado para a URL da 1.0. -
Dúvida Orientação a Objetos?
um tópico no fórum postou Renan Garcia de Oliveira Object Pascal - Delphi & Lazarus
Estou desenvolvendo um projeto e esbarrei em um problema em que preciso ficar copiando e colando o mesmo código em todos os métodos de algumas classes, mas não consegui resolver esse problema com o que conheço em POO. O que ocorre é o seguinte: Eu tenho neste projeto as minhas regras de negócio; para cada model, eu tenho uma regra de negócio (PessoaModel -> PessoaRN, EndereçoModel -> EndereçoRN, etc); dentro dessas classes "RN" eu recebo um Model da View, valido ele, e então executo a função em questão (PessoaRN.Inserir, PessoaRN.Editar, etc); cada vez que uma View executa um dos métodos das Regras de Negócio eu inicio uma transação no banco de dados, faço todo a validação e processamento do método, e no final se tudo deu certo, dou um commit, senão um rollback no banco de dados; fica no final com essa estrutura: function TRegraDeNegocio.Inserir(pModel: TModel):Boolean; begin DoIniciaTransacaoComBancoDeDados; try // // Aqui processa o código da função de fato // DoCommitTransacao; except on E: Exception do begin DoRollbackTransacao; raise Exception.Create(E.Message); end; end; end; Então resumindo: em todos os métodos de todas as regras de negócio eu teria que ficar copiando e colando todo o código acima com a exceção da parte comentada, porque é ali que entra o código de fato do método em si. Não consegui resolver com herança, pois tem código comum no início e no final. Existe algum outro detalhe na POO que resolveria essa questão? -
Trabalho com o Gutierres aqui na empresa e estamos a alguns dias quebrando cabeça com isso, até o momento o que a gente conseguiu identificar é que é algo com alguma DLL que as classes do OpenSSL utilizam, porquê se eu trocar a configuração pra Capicom vai que é uma beleza. Também quando estou testando com o OpenSSL e deixo a aplicação aberta, volta e meia do nada dispara uma exceção, depurando no delphi eu vi uma mensagem com o método "CertFreeCertificateContext" de alguma DLL.
-
Boa tarde, Gostaria de saber se é possível enviar um código criando um parâmetro para imprimir ou não a segunda via do NFC-e quando emitida em modo de contingência, pois de acordo com o Manual de Padrões Técnicos da Contingência Off-line Versão 2.0 de 16 de dezembro de 2016: "Alternativamente à impressão da segunda via do DANFE NFCe, quando de emissão em contingência, o contribuinte poderá optar pela guarda eletrônica, em local seguro, do respectivo arquivo XML da NFC-e. Neste caso, o contribuinte deverá possibilitar a impressão do respectivo DANFE NFC-e para apresentação ao fisco quando solicitado." (pag. 8) Então é possível não imprimir a segunda via desde que o estabelecimento guarde uma via eletrônica do XML e que seja capaz de imprimir a segunda caso algum fiscal solicite (ambas as funções eu já implementei). O manual também diz que para fazer uso desta opção o usuário deve lavrar termo no livro Registro de Utilização de Documentos Fiscais e Termos de Ocorrência - modelo 6, ou formalizar declaração de opção segundo disciplina que vier a ser estabelecida por sua Unidade Federada, assumindo total responsabilidade pela guarda do arquivo e declarando ter ciência que não poderá, posteriormente, alegar problemas técnicos para justificar a eventual perda desta informação eletrônica sob sua posse, assumindo as consequências legais por ventura cabíveis. Então sendo possível, gostaria de saber quais os passos para enviar esta modificação no código para vocês. Manual_de_especificacoes_tecnicas_da_Contingencia_Off-line_versao_2.0 (1).pdf
- 3 replies
-
- segunda via
- nfce
-
(e 1 mais)
Tags:
-
O que consegui depurar aqui é que quando tento efetuar uma inutilização com OpenSSL o erro ocorre dentro da unit ACBrDFeXsXmlSec no método TDFeSSLXmlSignXmlSec.XmlSecSign, na linha 578 do arquivo: doc := xmlParseDoc(PAnsiChar(ConteudoXML)); O valor do ConteudoXML é o seguinte: <!DOCTYPE test [<!ATTLIST infInut Id ID #IMPLIED>]> <inutNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10"> <infInut Id="ID52172647484800014665005000000082000000082"> <tpAmb>2</tpAmb> <xServ>INUTILIZAR</xServ> <cUF>52</cUF> <ano>17</ano> <CNPJ>26474848000146</CNPJ> <mod>65</mod> <serie>5</serie> <nNFIni>82</nNFIni> <nNFFin>82</nNFFin> <xJust>Erro ao gerar número sequencial no software</xJust> </infInut> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> <Reference URI="#ID52172647484800014665005000000082000000082"> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <DigestValue></DigestValue> </Reference> </SignedInfo> <SignatureValue></SignatureValue> <KeyInfo> <X509Data> <X509Certificate></X509Certificate> </X509Data> </KeyInfo> </Signature> </inutNFe> E quando tenta executar o xmlParseDoc é quando dá o erro Falha ao interpretar o XML "xmlParseDoc"
-
Eu tentei executar pelo demo mas não deu certo, foi um custo só pra instalar e compilar ele. Mas quando tento executar a inutilização com versão da Nf-e 4.0 dá um erro dizendo que o OpenSSL não suporta TL_TLSv1_2, se eu seleciono uma versão menor aí da erro no XML. Mas no meu sistema eu executo mesmo método que o inutilizar do demo faz, usando um certificado A1 configurado no OpenSSL, realizo uma inutilização para NFC-e, modelo 65.
-
Sugestão de alteração no código
um tópico no fórum postou Renan Garcia de Oliveira NFC-e - Nota Fiscal do Consumidor Eletrônica
Bom dia, Gostaria de sugerir a alteração abaixo no método "CancelaCupomVirtual" da classe "TACBrECFVirtualNFCeClass": procedure TACBrECFVirtualNFCeClass.CancelaCupomVirtual; var NomeNFCe, cStat, xMotivo: string; begin if Estado = estNaoFiscal then exit; with fsACBrNFCe do begin if (Estado in estCupomAberto) or (Estado in estPagamento) then // Não precisa cancelar se ainda não enviou...d begin NotasFiscais.Clear; exit; end; ... Adicionando o "(Estado in estPagamento)", pois ocorre a seguinte situação: eu estou realizando uma venda em modo OnLine e ao executar o "FechaCupom" ocorre um erro de conexão, então eu preciso deixar esta venda pendente e abrir uma nova em modo OffLine, o problema é que como há erro de conexão o "FechaCupom" não irá funcionar (a não ser que haja algum parâmetro que eu não identifiquei na classe) então preciso cancelar o documento aberto na ECFVirtual, mas a essa altura o Estado não é mais estCupomAberto e sim estPagamento pois já foram realizados os pagamentos. Na verdade o código está certo, foi falta de atenção minha. Mas mesmo entrando no bloco NotasFiscais.Clear; exit; Aparentemente o componente ainda tenta enviar o cancelamento da nota, pois recebo a mensagem de erro dizendo que não há notas para serem canceladas. -
Falha ao interpretar o XML "xmlParseDoc"
um tópico no fórum postou Renan Garcia de Oliveira NFC-e - Nota Fiscal do Consumidor Eletrônica
Boa tarde, Estou tentando realizar uma inutilização com o libOpenSSL mas sempre recebo o seguinte erro: Falha ao assinar Inutilização Nota Fiscal Eletrônica Erro: Falha ao interpretar o XML "xmlParseDoc" Eu efetuo a inutilização da seguinte forma: ACBrNFe.WebServices.Inutiliza( DAO.QueryConsultaEmpresa.Query('CG_EMP').FieldByName('CNPJ').AsString, 'Erro ao gerar número sequencial no software', StrToInt(FormatDateTime('yyyy', Now)), 65, DAO.QueryConsultaPDV.Query('TB_PDV').FieldByName('NRO').AsInteger, pNroInicial, pNroFinal); Esse é um erro antigo, com o Capicom funciona corretamente então venho mantendo meus clientes com Capicom, mas agora com a mudança no ACBr a inutilização teria que funcionar com OpenSSL. Alguém mais já teve esse erro ao efetuar inutilização com OpenSSL? -
Problema com recuperação de XML
um tópico no fórum postou Renan Garcia de Oliveira NFC-e - Nota Fiscal do Consumidor Eletrônica
Bom dia, Estou enfrentando a seguinte situação que não consigo tratar com o NFC-e: Dentro do sistema eu preparo todo o objeto do cupom eletrônico da ACBr e executo o envio, a nota então é enviada, o servidor da SEFAZ consegue receber ela e processa toda a nota pra então enviar o retorno, só que nesse meio tempo cai a internet na loja e o retorno nunca chega, pro sistema a única coisa que consigo detectar é a queda da conexão. Então eu mudo para o modo OffLine e finalizo a venda para liberar o cliente. Mais tarde o usuário envia essa venda que ficou pendente e antes disso no sistema eu consulto a chave, se ela existir na SEFAZ então só finalizo as rotinas internas do sistema para processar a venda. O problema é que como eu não recebi o retorno no momento do envio, o XML que eu tenho salvo está errado, pois ele não possui a tag "nfeProc" que é gerada somente após a autorização da nota pela SEFAZ, neste caso é pior ainda, porque como troquei para modo offline anteriormente, o XML que tenho na base de dados está como contingência. Existe alguma forma de recuperar o XML que foi autorizado na SEFAZ? Ou o processo que estou fazendo está incorreto e qual seria o tratamento certo? Atenciosamente, Renan Garcia de Oliveira. -
Boa Tarde, Implementei a NFC-e no próprio PAF e configuro o ACBrECF para virtual, mas ao registrar item com alíquotas diferentes retorna o erro de alíquota não registrada, como faço nesse caso?. Tentei usar o ACBrECFVirtualNFCe, mas tive duvidas, tenho que conectar o ACBrNFe nele e preencher normalmente? ou tenho que utilizar o método vendeitem? Já olhei bastante os exemplos e li os manuais, mas se vocês tiverem mais material para me ajudar eu agradeceria muito. Desde já agradeço!
-
Problema Ao Atualizar Tabelas Pinpad
Renan Garcia de Oliveira replied to Renan Garcia de Oliveira's tópico in Dúvidas sobre TEF
Boa tarde, Eu utilizo uma classe que fiz para o CliSiTef, mas fiz o teste com o TEFDemo do ACBr e tive o mesmo problema. Eu imagino que o problema seja algo relacionado à versão da DLL, vou entrar em contato com a Software Express para tentar solucionar, mas mesmo assim estou enviando em anexo o log gerado pelo TEFDemo. Atenciosamente, Renan Garcia de Oliveira. [update] Dito e feito, eram as DLL's mesmo. Eu pedi o material de homologação para eles em dezembro, e veio com a DLL versão 4.0.0.24, eu voltei para as minhas DLL's antigas, versão 4.0.0.17 e consegui efetuar a carga no PinPad. CliSiTef.txt -
Problema Ao Atualizar Tabelas Pinpad
um tópico no fórum postou Renan Garcia de Oliveira Dúvidas sobre TEF
Boa tarde, Estou iniciando os testes para homologar o CliSiTef, mas sempre que vou tentar vender com um cartão de crédito magnético o TEF começa a atualizar as tabelas do pinpad, mas sempre trava na hora de carregar o registro 5. Eu tive esse problema antigamente - na versão anterior do meu sistema - e acontecia porque eu ficava exibindo a mensagem do comando 3 na tela do pinpad, aparentemente isso lotava a comunicação com o pinpado, pois o TEF estava atualizando as tabelas e eu enviando mensagens para a tela. Recentemente refizemos todo o nosso PDV mas eu mantive praticamente todo o código antigo do CliSiTef, tomando o devido cuidado de não mandar nada para a tela do pinpad durante a carga de tabelas, mesmo assim estou tendo o antigo erro. Gostaria de saber se alguém já teve este problema ao carregar as tabelas do pinpad e qual a solução encontrada. Estou enviando em anexo o debug com os comandos e mensagens recebidos no ContinuaFuncaoSiTefInterativo. Atenciosamente, Renan Garcia de Oliveira. Debug.txt -
Sim, coloquei as duas junto da aplicação e deu o memso erro de novo. Rodei o registra.bat e executei o programa em outro computador que não mexi com a libeay, nada ainda. Mais ou menos um mês atrás eu consegui rodar este comando, quinta-feira agora eu vou homologar o PAF, aí peguei o roteiro e to repassando ele só pra confirmar, logo que chegou no teste do menu fiscal me vem essa ¬¬
-
Erro Ao Executar Arquivomf_Dll
um tópico no fórum postou Renan Garcia de Oliveira Dúvidas Gerais sobre o ACBr
Estou tentando realizar o comando ArquivoMF_DLL, testei com uma ECF Daruma e uma Bematech nas ruas recebo um erro de access violation na libeay32.dll. Alguém já teve este problema, ou está tendo e o que posso fazer para tentar resolver? Já copiei as DLLs libeay32 da pasta OpenSSL do ACBr pra tudo quanto é lado no computador e até agora nada. -
Em fim, consegui resolver o problema de "Carácter inválido encontrado no texto". Na verdade o método acima funciona perfeitamente para enviar o arquivo, quem me pregou uma peça foi a própria estrutura do sistema daqui da empresa, não sei o porquê direito mas de certa forma algumas classes estavam sobrescrevendo alguns do métodos utilizados, por exemplo: o "Reset(vF);", minha regra de negócio herda de uma classe que já possui um método Reset mas que faz outras funções. Agora que o SNGPC está tinindo gostaria de saber se não há algum manual de como adequar o código dele para que eu possa contribuir com o código para o Projeto ACBr também.
-
Vou tentar postar mais uma vez o meu problema, ontem o dia todo e hoje fiz diversas tentativas para gerar um arquivo e sempre o mesmo bendito erro: "Caractere inválido encontrado no texto" Segue abaixo todo o código que utilizo para enviar o arquivo ao SNGPC (via webservice) e um arquivo gerado. //Gerar XML vNomeArquivo := FormatDateTime('yyyymmddhhnnsszzz', Now); vXMLResultante := TXMLDocument.Create(nil); vXMLResultante.Active := False; vXMLResultante.FileName := ''; vXMLResultante.LoadFromXML(FInventario.GerarSngpc2Inventario); //Salvar arquivo e compactar em formato zip if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc') then ForceDirectories(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc'); vXMLResultante.Active := true; vXMLResultante.SaveToFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vNomeArquivo + '.xml'); vNomeArquivo := DoCompactaXML(vNomeArquivo); { DoCompactaXML } function TRN_EQ_SNGPC2.DoCompactaXML(pNomeArquivo: string): string; var vZipFile: TZipFile; begin //Compacta o arquivo vZipFile := TZipFile.Create; try vZipFile.Open(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip', zmWrite); vZipFile.Add(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); vZipFile.Close; finally vZipFile.Free; DeleteFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); Result := ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip'; end; end; //Gerar Hash FDSDados.DataSet.Edit; //FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString := DoGetHashFromZipFile(vNomeArquivo); FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString := MD5Print(MD5String(vXMLResultante.XML.Text)); { DoGetHashFromZipFile - Atualemten estou gerando hash a partir do texto xml, mas pelo arquivo zip ainda ocorria o mesmo erro } function TRN_EQ_SNGPC2.DoGetHashFromZipFile(pNomeArquivo: string): string; var vIdmd5: TIdHashMessageDigest5; vFs: TFileStream; begin vIdmd5 := TIdHashMessageDigest5.Create; vFs := TFileStream.Create(pNomeArquivo, fmOpenRead or fmShareDenyWrite); try Result := vIdmd5.HashStreamAsHex(vFs); finally vFs.Free; vIdmd5.Free; end; end; //Enviar FDSDados.DataSet.FieldByname('MENSAGEM').AsString := vGerenciador.EnviarArquivo( FInventario.Usuario, FInventario.Senha, FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString, vNomeArquivo, vHomologacao); { EnviarArquivo } function TSngpc2Gerenciador.EnviarArquivo(pEmail, pSenha, pHash, pArquivo: string; pTeste: Boolean): string; var FacWsTeste: ITSngpc2SoapTeste; FacWsProducao: ITSngpc2SoapProducao; begin Result := EmptyStr; try try if pTeste then begin FacWsTeste := TSngpc2SoapTeste.Create; with FacWsTeste do begin WsTeste := LoadSngpcSoapTeste(); Result := WsTeste.EnviaArquivoSNGPC(pEmail, pSenha, FileToByteArray(pArquivo), pHash); end; end else begin FacWsProducao := TSngpc2SoapProducao.Create; with FacWsProducao do begin WsProducao := LoadSngpcSoapProducao(); Result := WsProducao.EnviaArquivoSNGPC(pEmail, pSenha, FileToByteArray(pArquivo), pHash); end; end; except on E: Exception do raise Exception.Create(E.Message); end; finally DeleteFile(pArquivo); end; end; { FileToByteArray } function TSngpc2Gerenciador.FileToByteArray(const pFileName: string): TByteDynArray; const BLOCK_SIZE = 1024; var vBytesRead, vBytesToWrite, vCount: integer; vF: file of Byte; vTemp: Pointer; begin AssignFile(vF, pFileName); Reset(vF); try vCount := FileSize(vF); SetLength(Result, vCount); vTemp := @Result[0]; vBytesRead := BLOCK_SIZE; while (vBytesRead = BLOCK_SIZE) do begin vBytesToWrite := Min(vCount, BLOCK_SIZE); BlockRead(vF, vTemp^, vBytesToWrite, vBytesRead); vTemp := Pointer(LongInt(vTemp) + BLOCK_SIZE); vCount := vCount - vBytesRead; end; finally CloseFile(vF); end; end; 20130903093315710.xml
-
Ainda continuo sem conseguir enviar o arquivo pelo WebService, o mesmo erro de sempre.
-
É pra acabar mesmo, tentei as duas alternativas: - Fiz o método RemoveAcento(); - Na hora de salvar o xml utilizei o encoding, .SaveToFile('asdasda', TEcncoding.UTF8); E nada, continuo recebendo a mensagem 'Caractere inválido encontrado no texto'.
-
Eu imagino que não seja esse o caso, pois o mesmo arquivo que gero para o web service é o que utilizo para fazer upload direto no site do SNGPC, aliás é a forma que osclientes estão utilizando atualmente. Mas irei testar ainda assim.
-
É esse erro mesmo , meu carma dos últimos dias...
-
Vou tentar postar mais uma vez pra ver se alguém ainda está com o problema de: Caracteres inválidos encontrados no texto. Esse é o passo a passo que faço para enviar oarquivo ao SNGPC 1º - Gero o conteúdo do arquivo e salvo ele em disco, em seguida compacto o arquivo para o formato .zip //Gerar XML vXMLResultante := FInventario.GerarSngpc2Inventario; //Salvar arquivo e compactar em formato zip if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc') then ForceDirectories(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc'); vNomeArquivo := FormatDateTime('yyyymmddhhnnsszzz', Now); vArquivo.Text := vXMLResultante; vArquivo.SaveToFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vNomeArquivo + '.xml'); vNomeArquivo := DoCompactaXML(vNomeArquivo); // * // *Método de compactação function TRN_EQ_SNGPC2.DoCompactaXML(pNomeArquivo: string): string; var vZipFile: TZipFile; begin //Compacta o arquivo vZipFile := TZipFile.Create; try vZipFile.Open(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip', zmWrite); vZipFile.Add(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); vZipFile.Close; finally vZipFile.Free; DeleteFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.xml'); Result := ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + pNomeArquivo + '.zip'; end; end; 2º - Gero um hash utilizando o arquivo .zip //Gerar Hash FDSDados.DataSet.Edit; FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString := DoGetHashFromZipFile(vNomeArquivo); // ** // ** Método para gerar o hash function TRN_EQ_SNGPC2.DoGetHashFromZipFile(pNomeArquivo: string): string; var vIdmd5: TIdHashMessageDigest5; vFs: TFileStream; begin vIdmd5 := TIdHashMessageDigest5.Create; vFs := TFileStream.Create(pNomeArquivo, fmOpenRead or fmShareDenyWrite); try Result := vIdmd5.HashStreamAsHex(vFs); finally vFs.Free; vIdmd5.Free; end; end; 3º - Efetuo o envio do arquivo FDSDados.DataSet.FieldByname('MENSAGEM').AsString := vGerenciador.EnviarArquivo(FInventario.Usuario, FInventario.Senha, FDSDados.DataSet.FieldByname('SNGPC_HASH').AsString, vNomeArquivo, vHomologacao); // *** // *** Método de envio do arquivo function TSngpc2Gerenciador.EnviarArquivo(pEmail, pSenha, pHash, pArquivo: string; pTeste: Boolean): string; var FacWsTeste: ITSngpc2SoapTeste; FacWsProducao: ITSngpc2SoapProducao; vFile: TByteDynArray; begin Result := EmptyStr; try if pTeste then begin vFile := FileToByteArray(pArquivo); // **** FacWsTeste := TSngpc2SoapTeste.Create; with FacWsTeste do begin WsTeste := LoadSngpcSoapTeste(); Result := WsTeste.EnviaArquivoSNGPC(pEmail, pSenha, vFile, pHash); end; end else begin vFile := FileToByteArray(pArquivo); FacWsProducao := TSngpc2SoapProducao.Create; with FacWsProducao do begin WsProducao := LoadSngpcSoapProducao(); Result := WsProducao.EnviaArquivoSNGPC(pEmail, pSenha, vFile, pHash); end; end; except on E: Exception do raise Exception.Create(E.Message); end; end; // *** Método para converter o arquivo no formato TByteDynArray function TSngpc2Gerenciador.FileToByteArray(const pFileName: string): TByteDynArray; const BLOCK_SIZE = 1024; var BytesRead, BytesToWrite, Count: Integer; F: file of Byte; pTemp: Pointer; begin AssignFile(F, pFileName); Reset(F); try Count := FileSize(F); SetLength(Result, Count); pTemp := @Result[0]; BytesRead := BLOCK_SIZE; while (BytesRead = BLOCK_SIZE) do begin BytesToWrite := Min(Count, BLOCK_SIZE); BlockRead(F, pTemp^, BytesToWrite, BytesRead); pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE); Count := Count - BytesRead; end; finally CloseFile(F); end; end; Já virei esse código do avesso um monte de vezes, e até hoje continuo com esse erro.
-
Isso é porque o WideString do Delphi 7 é o tipo string do Delphi XE+