Erros ao usar variáveis do Tipo AnsiString, AnsiChar, PAnsiString, PAnsiChar;

08/12/2016

0

Bom dia, a todos.

Pessoal tô muito perdido para entender essas variáveis, to ajustando o meu sistema com o SAT e resolvi usar as dlls dos fabricantes, Dimep, Tanca, Sweda, Elgin. Acontece que cada fabricante pede para declarar as funções de formas diferentes. Exemplos:

Fabricante X
Function EnviarDadosVenda(NumeroSessao:integer; CodAtivacao:AnsiString; Venda_XML: AnsiString): Pchar; stdcall; external dllsat.dll -

Fabricante Y
function EnviarDadosVenda(numeroSessao: integer; codigoDeAtivacao: PAnsiChar;  dadosVenda: PAnsiChar): PAnsiChar; stdcall; external 'SAT.dll' name 'EnviarDadosVenda'

Bom, quando vou passar as strings do meu programa para a função, e tenho o retorno da função volta cheio de caracteres diferentes, estranhos, o caracter (ã) volta com um código asc sem sentido , exemplo(ù, ¢, ┌,) e assim por diante. Lendo aqui no fórum descobri que tenho que converter strings para AnsiString, String para AnsiChar, mas na função ta declarada com PAnsiChar, tá díficil não to conseguindo.

Alguém saberia me indicar alguns artigos sobre essas conversões ou alguns exemplos, estou precisando bastante.

Obrigado
Sandro Ávila
Sandro ávila

Sandro ávila

Responder

Posts

09/12/2016

Ismael Machado

Você provavelmente utiliza o Delphi XE2 ou superior, correto?
Neste caso, você precisa sim converter o tipo String para AnsiString, caso contrário os acentos ficarão todos errados. E para converter é realmente bem simples, basta declarar uma variável deste tipo no escopo... Veja o exemplo:

var
  as: AnsiString;
  s: String;
begin
  s := 'exemplo';
  as := s; //Converte String para AnsiString
  MetodoQualquer(PAnsiChar(as)); //Chama um método utilizando o ponteiro do AnsiString, ou seja, PAnsiChar.
end;


Isto deve funcionar
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar