|
|
#1
|
|||
|
|||
Проблема с DLL
Помогите пожалуйста разобраться )
Я подключаю Dll динамически..загружается нормально, но функцию описаную в Dll не находит Функция описанная в Dll: Код:
function CreateFilter:MYAPI2;stdcall; begin Result:= PictureFilter.Create; end; exports CreateFilter; Та часть кода где вызываю dll, и пытаюсь функцию вызвать: Код:
Type TCreateFilter = function: MYAPI2; procedure TForm1.LoadData; var p:Tbitmap; hPlugIn: THandle; CreateFilter: TCreateFilter; Filter: MYAPI2; begin hPlugIn := LoadLibrary('plugin.dll'); CreateFilter := GetProcAddress(hPlugIn,'CreateFilter'); if Assigned(CreateFilter) then// не выполняется, CreateFilter = nil begin ....... end; Последний раз редактировалось Abracadabra, 11.01.2011 в 17:43. |
#2
|
||||
|
||||
А что есть MYAPI2?
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#3
|
|||
|
|||
MYAPI2 Это мой интерфейс
|
#4
|
|||
|
|||
Я имею предсавление как подключается статически и динамически dll...проблема в том что не могу понять почему у меня не находит функцию, вроде же все правильно написано
|
#5
|
||||
|
||||
По предложенным огрызкам кода Вам врятли кто-то даст ответ. Или покажитель больше кода... или одно из двух. (с) Братья пилоты.
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#6
|
|||
|
|||
Кода не так уж много...вот
Описание интерфейса Код:
MYAPI2 = interface ['{FE84A03E-74F6-48B9-97B6-C9EC4ECFD174}'] procedure ModifPicture(var p: TBitMap); end; Dll Код:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ExtCtrls, Buttons, ColorGrd, Menus, ExtDlgs,InterfaceUnit; {$R *.res} type PictureFilter = class(TInterfacedObject, MYAPI2) procedure ModifPicture(var p: TBitMap); end; procedure PictureFilter.ModifPicture(var p: TBitMap);stdcall; var i,j:integer; begin for i := 0 to p.Width-1 do for j:= 0 to p.Height-1 do p.Canvas.Pixels[i,j]:=rgb(0,0,GetbValue(p.Canvas.Pixels[i,j])); end; function CreateFilter:MYAPI2;stdcall; begin Result:= PictureFilter.Create; end; exports CreateFilter; begin end. Само приложение Код:
type TForm1 = class(TForm) ColorGrid1: TColorGrid; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; Image1: TImage; SpinEdit1: TSpinEdit; SpeedButton4: TSpeedButton; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; OpenPictureDialog1: TOpenPictureDialog; SavePictureDialog1: TSavePictureDialog; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; procedure FormCreate(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpinEdit1Change(Sender: TObject); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton4Click(Sender: TObject); public procedure LoadData; end; TCreateFilter = function: MYAPI2; procedure TForm1.LoadData; var p:Tbitmap; hPlugIn: THandle; CreateFilter: TCreateFilter; Filter: MYAPI2; begin hPlugIn := LoadLibrary('plugin.dll'); CreateFilter := GetProcAddress(hPlugIn,'CreateFilter'); if Assigned(CreateFilter) then begin Filter := CreateFilter; p:=image1.Picture.Bitmap; filter.ModifPicture(p); image1.Refresh; end; end; procedure TForm1.N6Click(Sender: TObject); var i,j: Integer; begin LoadData; end; |
#7
|
||||
|
||||
|