Fórum UDF Esquisita #60725

29/06/2009

0

Amigos fiz uma UDF, bem o que ocorre e que na 1º pesquisa funciona 100¬, mas quando faz a 2º ae ele come caracteres e começa a aparecer letras que nem existe, alquem daria uma luz

function InteiroStr(Strr: pchar): Pchar; cdecl; export;
const Numero = ´1234567890´;
var
  x: Integer;
  S: string;
begin
  S := emptystr;
  for x := 1 to Length(Strr) do
  begin
    if Pos(Strr[x], Numero) <> 0 then
      S := Pchar(S + Strr[x]);
  end;
  Result := StrAlloc(Length(S));
  Result := PChar(S);
end;


DECLARE EXTERNAL FUNCTION INTEIROSTR
  CSTRING(15) CHARACTER SET NONE
RETURNS CSTRING(15) CHARACTER SET ASCII
ENTRY_POINT ´InteiroStr´ MODULE_NAME ´sahudf´;


obrigado


Sremulador

Sremulador

Responder

Posts

30/06/2009

Emerson Nascimento

function InteiroStr(Strr: pchar): Pchar; cdecl; export;
var
  x: Integer;
  S: string;
begin
  S := emptystr;
  for x := 0 to Length(Strr) do // inicia em 0 (zero)
    if (Strr[x] in [´0´..´9´]) then
      S := S + Strr[x];
  Result := PChar(S);
end;


outra coisa: o tamanho das strings de entrada e saída não pode estar pequeno? 15 é um valor suficiente? normalmente eu trabalho com 255, a menos que eu saiba exatamente o limite que será utilizado.

DECLARE EXTERNAL FUNCTION INTEIROSTR
  CSTRING(150) CHARACTER SET NONE
RETURNS CSTRING(150) CHARACTER SET NONE
ENTRY_POINT ´InteiroStr´ MODULE_NAME ´sahudf´;



Responder

Gostei + 0

30/06/2009

Sremulador

emerson, obrigado, porem quando foi hj eu estava de cabeça mais fria, fiz exatamente o que você fez, verifiquei q o problema estava na alocalçao de memoria, mas não entendi o pq, já que tenhou outa udf da mesma forma, e funciona, quanto ao tamanho do campo só preciso de 11, sobre o 0 e não 1, realmente era isso mesmo, obrigado.


Responder

Gostei + 0

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

Aceitar