Ver la Versión Completa : 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
https://www.clubdelphi.com/images/UtilizarTAGs.png
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.
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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.