Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Передача параметров в dll.   Найти похожие ветки 

 
Новичек   (2004-11-05 14:41) [0]

Добрый день, уважаемые Мастера.
Имеется такая dll:

type
   TAnyObject = class(TCustomControl)
 private
 protected
 public
 end;

var
 MyObject: TAnyObject;

function AnyFunction(MyParent: TWinControl): AnsiString; stdcall;
begin
 MyObject := TCustomControl.Create(Application);
 MyObject.Parent := MyParent;
end;


Вот так вызываю:

procedure TForm1.Button1Click(Sender: TObject);
var
 LibHandle: THandle;
begin
 LibHandle := LoadLibrary("ANYDLL.DLL");
 try
   @AnyFunction := GetProcAddress(LibHandle, "AnyFunction");
   if not (@AnyFunction = nil) then
   AnyFunction(Form1); //Передаю ссылку на Form1
 finally
   FreeLibrary(LibHandle);
 end;
end;


Получаю сообщение:
"Control" has no paren Window.
Подскажите, пожалуйста, что неправильно?


 
-=SS=- ©   (2004-11-05 14:55) [1]

Во первых какой Application ????
Во вторых что за переменная AnyFunction ????
И почему
MyObject := TCustomControl.Creat..
А не  
MyObject := TAnyObject.Create(MyObject); ????????????


 
Digitman ©   (2004-11-05 15:01) [2]

ты вообще зачем объявил класс TAnyObject ?
где ты его используешь ?


 
Новичек   (2004-11-05 15:03) [3]


> MyObject := TAnyObject.Create(MyObject);

Это верно, в оригинале так и есть.


> Во первых какой Application

Любой проект delphi содержит эту переменную.
Можно и Create(nil), суть не изменится. (Или Self).

Тогда получается такой код:


type
 TAnyFunction = function(MyParent: TWinControl): AnsiString; stdcall;
  TAnyObject = class(TCustomControl)
private
protected
public
end;

var
MyObject: TAnyObject;

function AnyFunction(MyParent: TWinControl): AnsiString; stdcall;
begin
MyObject := TAnyObject.Create(Self);
MyObject.Parent := MyParent;
end;

Вот так вызываю:

procedure TForm1.Button1Click(Sender: TObject);
var
LibHandle: THandle;
begin
LibHandle := LoadLibrary("ANYDLL.DLL");
try
  @AnyFunction := GetProcAddress(LibHandle, "AnyFunction");
  if not (@AnyFunction = nil) then
  AnyFunction(Form1); //Передаю ссылку на Form1
finally
  FreeLibrary(LibHandle);
end;
end;


 
-=SS=- ©   (2004-11-05 15:07) [4]

Ты так и не ответил как ты определяешь переменную  AnyFunction


 
-=SS=- ©   (2004-11-05 15:10) [5]

И вообще приведи лутше полный листинг


 
Новичек   (2004-11-05 15:24) [6]

Ваша правда, вот полный текст.
Программа:

unit Main;

interface

uses
 FastShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics,
 Controls, Forms, Dialogs, StdCtrls;

type
 TAnyFunction = function(MyParent: TWinControl): AnsiString; stdcall;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 LibHandle: THandle;
 AnyFunction: TAnyFunction;
begin
 LibHandle := LoadLibrary("ANYDLL.DLL");
 try
   @AnyFunction := GetProcAddress(LibHandle, "AnyFunction");
   if not (@AnyFunction = nil) then
   AnyFunction("Form1))
 finally
   FreeLibrary(LibHandle);
 end;
end;
end.


Библиотека:


library ANYDLL;

uses
 FastShareMem,
 Windows,
 ScktComp,
 Forms,
 Controls,
 Messages,
 Dialogs,
 SysUtils,
 StdCtrls,
 Classes;

type
   TAnyObject = class(TCustomControl)
 private
 protected
 public
 end;

var
 MyObject: TAnyObject;

function AnyFunction(MyParent: TWinControl): AnsiString; stdcall;
begin
 MyObject := TAnyObject.Create(Application);
 MyObject.Parent := MyParent;
 Result := "Any string";
end;

exports SendCommands;

begin
end.


 
PVOzerski ©   (2004-11-05 16:41) [7]

Я бы предпочел передавать в DLL только хэндл окошка, а внутри AnyFunction использовать CreateParented.


 
Новичек   (2004-11-05 18:58) [8]


> PVOzerski

Спасибо, попробую...


 
Новичек   (2004-11-05 19:17) [9]

Заработала DLL"ка :-)
Спасибо, Мастера.



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.032 c
3-1098865954
Its
2004-10-27 12:32
2004.11.21
Добавление записи в БД


14-1099917610
1g0r
2004-11-08 15:40
2004.11.21
Ищу игру "Пижамчик"


4-1097256441
Yaral
2004-10-08 21:27
2004.11.21
События принтера


4-1097321602
volser
2004-10-09 15:33
2004.11.21
Стандартные иконки


14-1099520828
Mirror
2004-11-04 01:27
2004.11.21
Куда можно спрятать дату активации проги?