Конвертор в Jpg

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#1
Доброго времени суток!
Нужна помошь.
Есть рукописная библиотека (писана в Delphi 7 ) которая конвертирует BMP в JPG... функция собственно очень простая... входные и выходные параметры - имя файла
И все вроде бы работает и конвертится, но... только эту dll планируется использовать в lotus script... и вот тут возникают проблемы... :(
функцию невозможно вызвать... приложение выдает ошибку и попросту закрывается.
Есть ли каки-нить методы написания DLL для использования в разных языках?

Ну и попутно еще вопрос/просьба... как можно получить доступ к страницам PDF-файла и сохранить их в JPG ? Желательно посмотреть на примеры
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
Есть рукописная библиотека (писана в Delphi 7 ) которая конвертирует BMP в JPG
а есть исходный текст библиотеки?

функцию невозможно вызвать... приложение выдает ошибку и попросту закрывается.
какие именно ошибки?
как происходит вызов из LS
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#3
вот декларация
Код:
Declare Function ConvertToJPG Lib "D:\Bmp2Jpg.dll" ( FName As String, Compress As Integer, Gray As Boolean ) As String
код DLL... писал правда в спешке....
Код:
library Bmp2Jpg;

uses
JPEG, Graphics;
{$R *.res}

function StrReplace(const Str, Str1, Str2: string): string;
// str - исходная строка
// str1 - подстрока, подлежащая замене
// str2 - заменяющая строка
var
P, L: Integer;
begin
Result := str;
L := Length(Str1);
repeat
P := Pos(Str1, Result); // ищем подстроку
if P > 0 then
begin
Delete(Result, P, L); // удаляем ее
Insert(Str2, Result, P); // вставляем новую
end;
until P = 0;
end;

function ConvertToJPG( FName: string; Compress : integer; Gray : boolean):string;
var
JPEG: TJPEGImage;
Bitmap: TBitmap;
str : string;
begin
JPEG := TJPEGImage.Create;
Bitmap := TBitmap.Create;
try
str := FName;
Bitmap.LoadFromFile(FName);

JPEG.Assign(Bitmap);
jpeg.CompressionQuality := Compress;
jpeg.Grayscale := Gray;

jpeg.Compress;

str := StrReplace( FName, 'bmp', 'jpg');
jpeg.SaveToFile( str );
Result := str;
finally
JPEG.Free;
Bitmap.Free;
end;
end;

exports
ConvertToJPG;

end.
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
попробуйте декларацию

Declare Function ConvertToJPG Lib "D:\Bmp2Jpg.dll" ( Byval FName As String, Byval Compress As Integer, Byval Gray As Boolean ) As String

ы. сама библиотека рабочая? тестировалась не на ЛС ?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#5
да... библиотека рабочая... правда тестил в делфи

так Declare Function ConvertToJPG Lib "D:\Bmp2Jpg.dll" ( Byval FName As String, Byval Compress As Integer, Byval Gray As Boolean ) As String
уже пробовал :(
 

morpheus

скриптописец
07.08.2006
3 915
1
#6
не помню точно, но вот возвращаемое значение в String в DLL имеет нюансы ... при создании новой Длл в делфи это описано прямо в файле проекта
 
E

etc

Гость
#7
ГЫ, так конечно, ктож стринги в экспортных функциях юзает, так низя. :(
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#8
Гы.... так даже без входныч параметров тоже не работает... вываливается вот с такой ошибкой
error.JPG
 
E

etc

Гость
#9
А соглашение о вызовах соответствуют? Я понятия не имею как оно в лотус-скрипт ...

PS: и отредактируйте уже наконец топик ;)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#12
победил я проблему... правда частично... осталось искать в чем же всетаки бок.
А дело вот в чем... оказалось в библиотеку передавалось искаженное значение переменной имени файла.
причем не важно какого типа параметр. пришлось имя файла хардкодить.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#14
вот такие вот параметры в функции
ConvertToJPG( Fname: PChar; Compress: integer; Gray: Boolean ): Boolean; stdcall;

так дкло в том, что не правильно передается имя не только из LS но и из Delphi
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#16
без stdcall - вылетает Лотус :)
но с ним не передаются любые строковые данные :)
 
E

etc

Гость
#17
NickProstoNick Вы читаете о чем спрашивают ли как? кто вам говорил убрать? Вопрос - почему имменно этот а не другой?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#18
etc
ну тогда встречный вопрос, почему другой а не этот?!
И вообще я просил совета. Если есть предложения - с удовольствием выслушаю.

И по сути, не нужено никакое соглашение... точнее оно бесполезно. Перебпробовал разные директивы - никакой разницы.
При попытке воспользоваться данными из входящей переменной типа String или Pchar приложение Lotus просто "вываливается"