PDA

Ver la Versión Completa : NVIEWLIB en windows 11/DX 10.4


LDD
15-12-2022, 19:15:20
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
https://www.clubdelphi.com/images/UtilizarTAGs.png

LDD
15-12-2022, 21:37:22
Gracias Casimiro, pero creo que no es esto lo que yo preguntaba

movorack
15-12-2022, 23:09:19
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 (https://www.clubdelphi.com/foros/guiaestilo.php) 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.


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:


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
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.