Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   NVIEWLIB en windows 11/DX 10.4 (https://www.clubdelphi.com/foros/showthread.php?t=96007)

LDD 15-12-2022 19:15:20

NVIEWLIB en windows 11/DX 10.4
 
Hola de nuevo.

Tengo un problema con la llamada a NViewLibLoad de nViewLib.dll

No sé si el problema está en mi DELPHI DX 10.4 o es de Windows 11

Var mimagenenpchar : pChar
bmp : tBitmap;
.
.
bmp := TBitmap.Create;
mimagenenpchar := pchar('C:\programas\test\camarero_02.bmp');
bmp.handle := nViewload(mimagenenpchar, False); <- aquí obtengo mensaje "Error loading C"

Es como si el array que convierte pchar sólo leyera el primer caracter de la cadena del fichero de imagen "C"

¿Sabéis qué está ocurriendo?

Gracias

Casimiro Notevi 15-12-2022 20:45:19


LDD 15-12-2022 21:37:22

Mmmm , ¿ te has equivocado de foro o de mensaje ?
 
Gracias Casimiro, pero creo que no es esto lo que yo preguntaba

movorack 15-12-2022 23:09:19

Cita:

Empezado por LDD (Mensaje 549592)
Gracias Casimiro, pero creo que no es esto lo que yo preguntaba

No! no se equivocó. Casimiro es la IA (Inteligencia Artesanal :D) encargada de recordarnos cuando no cumplimos las normas y guía de estilo de nuestro foro. (Te invito a leerla)

Ahora, con lo del error! ¿No será que la DLL tiene alguna falla? ¿O no tienes la versión correcta? ¿tienes documentación de esa DLL?

Usando la bola de cristal y leyendo un post anterior tuyo, creo que este error se te presenta al usar un componente que a su vez usa la DLL en cuestión.

En el código del componente encuentro que lo usan de una manera parecida a esta, y efectivamente genera el error que comentas.

Código Delphi [-]
function NViewLibLoad(FileName : PChar; ShowProgress: BooLean):hbitmap; Stdcall; external 'NViewLib.dll';

procedure TForm1.Button1Click(Sender: TObject);
  procedure callNViewLibLoad(FileName: string; ShowProgress: Boolean);
  var
    bmp: TBitmap;
    lPchar: PChar;
    len: Integer;
  begin
    len := Length(FileName) + 1;
    bmp := TBitmap.Create;
    try
      lPchar := StrAlloc(len+1);
      StrPLCopy(lPChar, FileName, len);
      bmp.Handle := NViewLibLoad(lPchar, ShowProgress);
    finally
      bmp.Free;
    end;
  end;
begin
  callNViewLibLoad('C:\000.bmp', False); //Error loading C
end;

Pero, leyendo también el componente, veo que lo que quieren es dibujar el bmp en un canvas (imagino que el de un reporte), cosa que tu podrías solventar de otras maneras y sin necesidad de usar esa DLL. Por ej:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
  procedure DrawBitmap(FileName: string; ACanvas: TCanvas);
  var
    bmp: TBitmap;
  begin
    bmp:= TBitmap.Create;
    try
      bmp.LoadFromFile(FileName);
      ACanvas.Draw(0, 0, bmp);
    finally
      bmp.Free;
    end;
  end;
begin
  DrawBitmap('C:\000.bmp', Self.Canvas); //Carga el BMP en el formulario
end;

Entonces, si no quieres depender de esa DLL. Lo que podrías hacer es reemplazar su uso por funciones de la VCL.

LDD 17-12-2022 00:42:59

Gracias Movorack PROBLEMA RESUELTO
 
La libreria es correcta, incluso bajé la version más reciente de NVIEWLIB.DLL del año 2022

Pero en realidad estoy haciendo un upgrade de una aplicación en Delphi 6.

En cualquier caso tienes razón, no había motivo para usarla, puedo dibujar directamente en el canvas y... PROBLEMA RESUELTO

Muchas gracias, a veces nos obcecamos con opciones innecesarias.


La franja horaria es GMT +2. Ahora son las 09:13:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi