Форум: "KOL";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "KOL";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c