Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
4-1097233010
cerber1
2004-10-08 14:56
2004.11.21
Работа с HKEY_PERFORMACE_DATA


1-1099640917
Maxim____
2004-11-05 10:48
2004.11.21
tthread замучил


14-1098362629
tox
2004-10-21 16:43
2004.11.21
PE формат


4-1097429834
Clampo
2004-10-10 21:37
2004.11.21
Монитор


11-1082730937
Max003
2004-04-23 18:35
2004.11.21
Как сделать форму, перетаскивуемую за любое место.




   Наверх