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

Вниз

Помогите с DLL   Найти похожие ветки 

 
c0pYc@t   (2002-07-15 14:11) [0]

Попробывал поработать с DLL возникли вопросы:

Можно ил подключить динамически DLL, содержащюю форму, которую я пытаюсь отобразить немодальным.
Модальное окно отображается без проблем.

Код Dll

library ProjDll;

uses
SysUtils,
Classes,
DllFormU in "DllFormU.pas" {DLLForm};
{$R *.res}
exports
Showform, FreeForm;
begin
end.

Юнит Dll

unit DllFormU;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TDLLForm = class(TForm)
ListBox1: TListBox;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure ShowForm(Appl, Form : THandle);
procedure FreeForm;
var
DLLForm: TDLLForm;
CallForm: THandle;
implementation

{$R *.dfm}
procedure ShowForm(Appl, Form:THandle);
begin
Application.Handle := Appl;
DllForm := TDllForm.Create(Application);
CallForm := Form;
DllForm.Show;
end;
procedure FreeForm;
begin
DllForm.Free
end;
procedure TDLLForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if CallForm<>0 then
SendMessage(CallForm, wm_User,0, 0)
end;
end.

Код самой проги

unit TestU;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
LibHandle: LongWord;
showForm: procedure(Appl, Form:THandle);stdcall;
freeForm: procedure;stdcall;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
@ShowForm := nil;
{Пытаемся загрузить библиотеку}
LibHandle := LoadLibrary("ProjDll.DLL");
{Если все OK}
if LibHandle >= 32 then begin
{...то пытаемся получить адрес функции в библиотеке}
@ShowForm := GetProcAddress(LibHandle,"ShowForm");
{Если и здесь все OK}
if @ShowForm <> nil then
{...то вызываем эту функцию и показываем результат}
showForm(Application.Handle, Self.Handle);
end;
Button2.Enabled := true;
Button1.Enabled := false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FreeForm;
Button1.Enabled := true;
Button2.Enabled := false;
end;
end.


 
Digitman   (2002-07-15 14:47) [1]

Конечно, можно. Не только можно, но в ряде случаев и желательно.

А в чем проблема-то собственно ?


 
c0pYc@t   (2002-07-16 08:15) [2]

Digitman Дык, при нажатии на Btn1 окно то появляется, но выдает ошибку при обращении к странице памяти по ffffff и так далее...


 
c0pYc@t   (2002-07-16 09:15) [3]

Прикиньте, вроде разобрался все дело в волшебных пузырьках)))))

просто при указании имени функции нужно не забывать про регистр букв, а то потом не разобраться чем D отличается от С

PS И еще отключите stdcall у функций в программе вызова, они нужны только при статической загрузке


 
Alx2   (2002-07-16 10:18) [4]

>PS И еще отключите stdcall у функций в программе вызова,
> они нужны только при статической загрузке

Совершенно неверно.
Способ передачи параметров в функцию не зависит от способа загрузки DLL. Требуется только совпадение этой спецификации для хоста и для DLL.



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

Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.021 c
1-95303
sau
2002-07-17 14:23
2002.07.29
Макроподстановка


3-95227
-=NIGERS BASTARD=-
2002-07-08 12:41
2002.07.29
ImageList


3-95189
Кузнецов
2002-07-05 14:35
2002.07.29
Запросы буть они не ладны


1-95427
id_privin
2002-07-16 14:55
2002.07.29
Глюк


14-95516
ricks
2002-07-02 14:00
2002.07.29
Iconcache





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский