![]() |
|
|
Регистрация | << Правила форума >> | 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
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#3
|
|||
|
|||
![]() Поменял на Pchar, и результат тот же.
|
#4
|
|||
|
|||
![]() 1. Используй ShareMem в начале uses
2. Попробуй явно создавать, и в библиотеке result:=TBitmap.Create; result.free; и в проге через переменную типа BTM:= TBitmap.Create; image1.Picture.Bitmap:=BTM; |