Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.23;
Скачать: 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 вся ветка

Текущий архив: 2003.12.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
1-75204
Альф
2003-12-11 11:49
2003.12.23
Как програмно узнать количество строковых ресурсов ?


7-75432
Gregory
2003-10-15 13:14
2003.12.23
Управление сигналом RTS в COM порте.


3-75084
Frog
2003-11-30 18:56
2003.12.23
Помогите плз с прогоном SQL скриптов !!!!!


1-75226
jonni
2003-12-10 01:17
2003.12.23
минимизирование и активирование TForm


1-75260
ZHK
2003-12-08 15:52
2003.12.23
Как поймать стандартный ДОС-овский вывод?