Ver Mensaje Individual
  #1  
Antiguo 20-06-2007
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Reputación: 20
Albano Va por buen camino
Error "Invalid pointer operation" en función contenida en DLL

Hola a todos! tengan un buen dia...
Trabajo con delphi 2005, hice una función que convierte un número flotante a Letra, incluyendo los centavos... Esta función la hice hace tiempo, sin darme cuenta que en los trucos de aqui, esta una parecida, pero como yo hice esta, me quedo con ella... bueno, aqui voy a pegar el código de la función, para el que le interese, por ahorita no he detectado errores en números menores a 1 millón, estoy trabajando para sacar la siguiente parte.
Bueno... ahora les explico mi error. Esta función la tengo en una DLL y cada vez que la mando llamar, me muestra un error que dice lo siguiente: "Invalid pointer operation". No estoy usando punteros en esta función y si la pongo directamente en mi programa, me funciona a la perfección, el error solo sale cuando la pongo en la DLL y la quiero usar. ¿Alguien sabe qué esta pasando?
Gracias de antemano, Dios les bendiga.
Código Delphi [-]
Function TFrameGui.ConvNumLetra(Numero: extended): string;
var
  k, u, m, unidad: integer;
  cadena, resultado, nuevo, unidadnueva, centavos: string;
  unidadpendiente, decenapendiente, mil, millon: boolean;
begin
  cadena := floattostr(numero);
  delete(cadena, pos(decimalseparator, cadena), maxint);
  centavos := floattostr((numero - strtofloat(cadena))* 100);
  delete(centavos, pos(decimalseparator, centavos), maxint);
  m := 0;
  u := 1;
  resultado := '';
  mil := false;
  unidadpendiente := false;
  decenapendiente := false;
  unidad := 0;
  millon := false;
  for k := length(cadena) downto 1 do
  begin
    nuevo := '';
    case u of
      1:
      begin
        unidadpendiente := true;
        decenapendiente := true;
        unidadnueva := '';
        unidad := 0;
        case cadena[k] of
          '1':
          begin
            unidadnueva := 'UN';
            if (k > 1) and (cadena[k - 1] = '1') then unidadnueva := '';
            unidad := 1;
            if millon = true then
            begin
              nuevo := nuevo + ' MILLON ';
              millon := false;
              mil := false;
            end;
          end;
          '2':
          begin
            unidadnueva := 'DOS';
            if (k > 1) and (cadena[k - 1] = '1') then unidadnueva := '';
            unidad := 2;
          end;
          '3':
          begin
            unidadnueva := 'TRES';
            if (k > 1) and (cadena[k - 1] = '1') then unidadnueva := '';
            unidad := 3;
          end;
          '4':
          begin
            unidadnueva := 'CUATRO';
            if (k > 1) and (cadena[k - 1] = '1') then unidadnueva := '';
            unidad := 4;
          end;
          '5':
          begin
            unidadnueva := 'CINCO';
            if (k > 1) and (cadena[k - 1] = '1') then unidadnueva := '';
            unidad := 5;
          end;
          '6': unidadnueva := 'SEIS';
          '7': unidadnueva := 'SIETE';
          '8': unidadnueva := 'OCHO';
          '9': unidadnueva := 'NUEVE';
          '0': unidadpendiente := false;
        end;
        if (cadena[k] in ['1'..'9']) and (mil = true) then
        begin
          nuevo := unidadnueva + ' MIL ';
          unidadnueva := '';
          mil := false
        end;
      end;
      2:
      begin
        case cadena[k] of
          '1':
          begin
            nuevo := 'DIECI';
            if cadena[k + 1] = '0' then nuevo := 'DIEZ';
          end;
          '2': nuevo := 'VEINTE';
          '3': nuevo := 'TREINTA';
          '4': nuevo := 'CUARENTA';
          '5': nuevo := 'CINCUENTA';
          '6': nuevo := 'SESENTA';
          '7': nuevo := 'SETENTA';
          '8': nuevo := 'OCHENTA';
          '9': nuevo := 'NOVENTA';
          '0': decenapendiente := false;
        end;
        if mil = true then
        begin
          nuevo := nuevo + ' MIL ';
          mil := false
        end;
      end;
      3:
      begin
        case cadena[k] of
          '1': nuevo := 'CIENTO ';
          '2': nuevo := 'DOSCIENTOS ';
          '3': nuevo := 'TRESCIENTOS ';
          '4': nuevo := 'CUATROCIENTOS ';
          '5': nuevo := 'QUINIENTOS ';
          '6': nuevo := 'SEISCIENTOS ';
          '7': nuevo := 'SETECIENTOS ';
          '8': nuevo := 'OCHOCIENTOS ';
          '9': nuevo := 'NOVECIENTOS ';
        end;
        if mil = true then
        begin
          nuevo := nuevo + ' MIL ';
          mil := false
        end;
      end;
    end;
    if u = 2 then //esta condición indica que estamos en decenas
    begin
      if unidadpendiente = false then  //esta condición indica que hay una unidad pendiente
      begin
        if nuevo = 'DIECI' then nuevo := 'DIEZ';
        resultado := nuevo + unidadnueva + resultado;
        unidadnueva := '';
      end
      else
      begin
        if nuevo = 'DIECI' then
        begin
          case unidad of
            1:
            begin
              nuevo := 'ONCE';
              unidadnueva := '';
            end;
            2:
            begin
              nuevo := 'DOCE';
              unidadnueva := '';
            end;
            3:
            begin
              nuevo := 'TRECE';
              unidadnueva := '';
            end;
            4:
            begin
              nuevo := 'CATORCE';
              unidadnueva := '';
            end;
            5:
            begin
              nuevo := 'QUINCE';
              unidadnueva := '';
            end;
          end;
          resultado := nuevo + unidadnueva + resultado;
        end
        else
        begin
          if nuevo <> '' then
            resultado := nuevo + ' Y ' + unidadnueva + resultado
          else resultado := nuevo + unidadnueva + resultado;
        end;
        unidadnueva := '';
      end;
    end
    else
    begin
      if decenapendiente = false then
      begin
        if nuevo = 'CIENTO ' then nuevo := 'CIEN ';
        resultado := nuevo + resultado;
      end
      else resultado := nuevo + resultado;
    end;
    if u < 3 then inc(u)
    else
    begin
      u := 1;
      case m of
        0:
        begin
          if numero > 999 then
            mil := true;
        end;
        1:
        begin
          if numero > 999999 then
            millon := true;
        end;
      end;
      if m = 0 then inc(m)
      else m := 0;
    end;
  end;
  if length(cadena) < 2 then resultado := unidadnueva;
  result := resultado + ' PESOS ' + centavos + '/100 M.N.';
end;
__________________
"Sé de tal manera y vive una vida tal, que si todos los hombres fueran como tú y vivieran como tú, nuestro mundo sería un paraíso terrenal"
Siempre hazlo con la ayuda de Dios
Responder Con Cita