Вниз
Скачать: CL | DM;

JpegObj и DLL   Найти похожие ветки 

 
Sapersky_   (2003-04-03 00:12) [0]

Пытаюсь сделать DLL-ку для загрузки jpeg"ов с помощью KOL. Не получается...

Var jpeg : PJpeg = nil;
implementation

function ReadJPEG(FileName : PChar; bmSize : PPoint) : HDC;
Var Ext : String;
w, h : Integer;
begin
Result:=0;
If FileExists(FileName) then begin
Ext:=ExtractFileExt(Filename);
If (Ext=".jpg") or (Ext=".jpeg") then begin
If jpeg=nil then jpeg:=NewJpeg;
jpeg.LoadFromFile(Filename);
bmSize.x:=jpeg.Width;
bmSize.y:=jpeg.Height;
( bmSize.x>0) Пытаюсь сделать DLL-ку для загрузки jpeg"ов с помощью KOL. Не получается...

Var jpeg : PJpeg = nil;
implementation

function ReadJPEG(FileName : PChar; bmSize : PPoint) : HDC;
Var Ext : String;
w, h : Integer;
begin
Result:=0;
If FileExists(FileName) then begin
Ext:=ExtractFileExt(Filename);
If (Ext=".jpg") or (Ext=".jpeg") then begin
If jpeg=nil then jpeg:=NewJpeg;
jpeg.LoadFromFile(Filename);
bmSize.x:=jpeg.Width;
bmSize.y:=jpeg.Height;
If (bmSize.x>0) and (bmSize.y>0) then Result:=jpeg.Bitmap.Canvas.Handle;
end;
end;
end;

procedure FreeJpeg;
begin
jpeg.Free;
end;

Используется, например, так:

jdll:=LoadLibrary("KOL_JPEG_LIB.dll");
ReadJPEG:=GetProcAddress(jdll,"ReadJPEG");
FreeJPEG:=GetProcAddress(jdll,"FreeJPEG");
DC:=ReadJpeg("noname.jpg",@bmSize);
If DC<>0 then BitBlt(WinDC,0,0,bmSize.x,bmSize.y,DC,0,0,SRCCOPY);
FreeJPEG;
FreeLibrary(jdll);

В тестовой программе с VCL глюкается сразу же (access violation на ReadJPEG), без VCL - на FreeJPEG.
Причём если использовать стандартные (VCL) TBitmap и TJpegImage (или KOL, но как юнит, а не как DLL) - всё работает.
Подозреваю, вопрос скорее по менеджменту памяти, чем по KOL, но тем не менее...


 
Кладов   (2003-04-07 21:45) [1]

А отлаживать не пробовали? Сделать останов в dll, и посмотреть, возвращает ли она что-нибудь?

Попробуйте указать полный путь к файлу. И зачем возвращать канву битмапа, когда проще вернуть хэндл битмапа.


 
Sapersky_   (2003-04-08 23:44) [2]

Спасибо за ответ, проблема уже решена. Вопрос оказался на внимательность - оказывается, при указании эспортного имени DLL регистр имеет значение... :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
1-75203
intell
2003-12-10 17:57
2003.12.23
Как быстро удалить каталог?


1-75262
WondeRu
2003-12-09 10:34
2003.12.23
String to float: запятая или точка?


1-75241
h0use
2003-12-10 16:49
2003.12.23
Непонятная ошибка при создании формы


7-75408
Ал
2003-10-20 11:41
2003.12.23
Как узнать, что система в простое и как - что вышла из него?


7-75417
неважно
2003-10-16 15:56
2003.12.23
Работа с несколькими компортами одновременно :(




   Наверх