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

Delphi

Automação Comercial

08/12/2016

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

Curtidas 0

Respostas

Ismael Machado

Ismael Machado

08/12/2016

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
GOSTEI 0
POSTAR