UDF Esquisita
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
obrigado
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
Curtidas 0
Respostas
Emerson Nascimento
29/06/2009
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´;
GOSTEI 0
Sremulador
29/06/2009
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.
GOSTEI 0