Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];

Вниз

Передача параметров в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.048 c
14-1099576045
_none_
2004-11-04 16:47
2004.11.21
Экспорт всех слоев PSD в отдельные файлы (png)


1-1099504208
++MASTER++
2004-11-03 20:50
2004.11.21
Создание банера


14-1099416329
Mihey_temporary
2004-11-02 20:25
2004.11.21
Фень Юань "Программирование графики для Windows"


4-1096610271
KSergey
2004-10-01 09:57
2004.11.21
Позиция курсора в Edit


14-1097861050
Sergey_Masloff
2004-10-15 21:24
2004.11.21
Вино соцопросы и АИФ. Оффтопик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский