![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте всем!
Пытаюсь написать dll которая будет конвертировать jpg в bmp, в delphi эта функция прекрасно работает, а вот экспортировать из dll не получается. Мне нужно чтобы из программы кликнув по кнопке, в dll передавался путь к файлу, а затем там этот jpg файл конвертировался в bmp и функция возвращала бы bitmap который я потом бы мог скопировать в Timage. Вот ниже привожу полностью код dll и самой программы, но увы почему-то не работает Помогите пожалуйста заставить всё это работать, я уже всю голову сломал. Да кстати SaveToClipboardFormat,LoadFromClipboardFormat мне не подходят. Dот код dll Код:
library jpgtobmp;
uses
SysUtils,Classes,jpeg,Graphics;
{$R *.res}
function convertjpgtobmp(p:String; bmp:TBitmap): TBitmap; stdcall;
var
JPEG: TJPEGImage;
begin
JPEG := TJPEGImage.Create;
JPEG.LoadFromFile(p);
Bmp.Assign(JPEG);
result:=bmp;
JPEG.Free;
end;
exports convertjpgtobmp;
begin
end.А вот код моей програмки, из которой я пытаюсь вызвать фунуцию из dll Код:
unit Convert;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
function convertjpgtobmp(p: string; bmp:TBitmap):TBitmap; stdcall;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
Image1: TImage;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function convertjpgtobmp; external 'jpgtobmp.dll';
{$R *.DFM}
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if opendialog1.Execute then
convertjpgtobmp(opendialog1.FileName,image1.Picture.Bitmap);
end;Заранее спасибо. |
|
#2
|
||||
|
||||
|
Ну если параметр String то надо и в Dll и в проект в список uses добавить самым первым ShareMem. Или поменять тип на PChar
|
|
#3
|
|||
|
|||
|
Поменял на Pchar, и результат тот же.
|
|
#4
|
|||
|
|||
|
1. Используй ShareMem в начале uses
2. Попробуй явно создавать, и в библиотеке result:=TBitmap.Create; result.free; и в проге через переменную типа BTM:= TBitmap.Create; image1.Picture.Bitmap:=BTM; |