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

Вниз

Помогите разобраться в DLL   Найти похожие ветки 

 
iluxa   (2004-02-25 13:53) [0]

Мастера помогите разобраться в DLL
делаю так:

library com_dll;

uses
ShareMem,
SysUtils,
Classes,
Forms,
Unit1 in "Unit1.pas" {Form1};

{$R *.RES}
exports
connect;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);

end.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OoMisc, AdPort;

type
TForm1 = class(TForm)
ApdComPort1: TApdComPort;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private

public

end;

function connect(var nomer:byte):integer; export;
var
Form1: TForm1;

implementation

{$R *.DFM}
function connect(var nomer:byte):integer;
begin
try
Form1.ApdComPort1.ComNumber:=nomer;
Form1.ApdComPort1.Open:=true;
except
else
ShowMessage("Возникло исключение "+Exception(ExceptObject).message);
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ApdComPort1.Open:=false;
end;

end.

и вызываю ее так
unit test;

interface

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

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

function connect(var nomer:byte):integer; external "com_dll";
var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
i:byte;
begin
i:=0;
connect(i);
end;

end.

при этом происходит ошибка
project ** raised exeption class Ewin32Error with message "A Win32 API function failed"

Что происходит? Подскажите пожалуйста.


 
iluxa   (2004-02-25 14:28) [1]

а при закрытии вообще вешает всю систему :(


 
KSergey ©   (2004-02-25 14:39) [2]

В модуле DLL:

> Application.Initialize; - не надо!
> Application.CreateForm(TForm1, Form1); (2)

(2)
Вообще-то создавать форму при первой загрузке DLL - не правильно, получается, что для всех запущеных экземпляров программ, данную DLL использующих, используется один и тот же экземпляр Form1, что не верно.

Форму необходимо создавать в экспортируемой ф-ции.


 
iluxa   (2004-02-25 14:43) [3]

т.е.
function connect(var nomer:byte):integer;
begin
try
Form1.create;// вот-так ??

Form1.ApdComPort1.ComNumber:=nomer;
Form1.ApdComPort1.Open:=true;
except
else
ShowMessage("Возникло исключение "+Exception(ExceptObject).message);
end;
end;


 
Mystic ©   (2004-02-25 14:45) [4]

Используй пакеты


 
KSergey ©   (2004-02-25 14:46) [5]

> Form1.create;// вот-так ??

Нет, вот так не получится ;) - конструктор формы имеет параметры

И еще

> function connect(var nomer:byte):integer; external "com_dll";

Может дописать расширение "com_dll .dll"


 
iluxa   (2004-02-25 14:48) [6]

нужна DLL. чтобы ее и из СИ могли пользовать


 
iluxa   (2004-02-25 14:52) [7]

function connect(var nomer:byte):integer;
begin
try
Application.CreateForm(TForm1, Form1);// сделал так

Form1.ApdComPort1.ComNumber:=nomer;
Form1.ApdComPort1.Open:=true;
except
else
ShowMessage("Возникло исключение "+Exception(ExceptObject).message);
end;
end;

а все равно при запуске DDL с параметрами запуска вылетает ошибка
, а при запуске из самой програмки использующей DLL вешается вся система, (это все при закрытии)


 
iluxa   (2004-02-25 14:59) [8]

а может я вообще все неправильно делаю :(
нужно DLL которая работает с компонентом для порта
и реализует несколько функций,
как это можно правильно решить, подкиньте скелетик, пожалуйста


 
KSergey ©   (2004-02-25 15:38) [9]

Чтобы и из Си можно было вызывать необходимо объявлять

> function connect(var nomer:byte):integer; stdcall;

> а может я вообще все неправильно делаю :(
> подкиньте скелетик, пожалуйста

А почитать статьи прямо на этом сайте - это не наш метод? Обязательно кто-то найти должен?
http://www.delphimaster.ru/articles/usedll/index.html
http://www.delphimaster.ru/articles/dll_use/index.html


 
iluxa   (2004-02-25 15:53) [10]

прочитал все, и эти статьи и другие, а все равно :(


 
Digitman ©   (2004-02-25 16:35) [11]


> iluxa (25.02.04 15:53) [10]


на кой ляд тебе вообще форма нужна в ДЛЛ ?


 
Erik ©   (2004-02-25 16:56) [12]

ShareMem нельзя использовать если вызывать из других языков будеш. А формы в Dll это для професионалов.


 
KSergey ©   (2004-02-25 17:09) [13]

> [11] Digitman © (25.02.04 16:35)

Хороший вопрос ;) Я не риснул, думаю - может хитрость какая военная ;)

> [12] Erik © (25.02.04 16:56)
> А формы в Dll это для професионалов.

Не, это не правда, т.к. у меня получается ;)

К стати, про ShareMem я не заметил
А может в этом все и дело? Ведь, судя по тексту, в основной программе у него ShareMem не вызывается... Хотя, возможно, и не в этом - ведь пока без String - ну разные менеджеры памяти, не все ли равно: из Sharemem они или из самого кода...


 
iluxa   (2004-02-25 17:52) [14]

хорошо , форма мне и не нужна, мне нужен компонент невизуальный, как мне это сделать, подскажите пожалуйста, а то я уже запутался


 
Digitman ©   (2004-02-25 18:03) [15]


> мне нужен компонент невизуальный


НевизуальныйКомпонент := КлассНевизуальногоКомпонента.Create(Владелец);


 
panov ©   (2004-02-25 20:25) [16]

>KSergey © (25.02.04 17:09) [13]
Хотя, возможно, и не в этом - ведь пока без String - ну разные менеджеры памяти, не все ли равно: из Sharemem они или из самого кода...

Нет, не все равно. Должен использоваться один и тот же менеджер памяти.


 
KSergey ©   (2004-02-26 05:27) [17]

> panov © (25.02.04 20:25) [16]

В случае передачи String, массивов и т.д. - разумеется. Но если это не использовать - не все ли равно? Если не используем ShareMem - у каждого свой менеджер (вшитый в код), если используем где-то - будет использоватся менеджер из ShareMem. Но не все ли равно какой менеджер используется, если не испльзовать передачу String и т.п.?



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

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

Наверх




Память: 0.51 MB
Время: 0.02 c
3-25708
Belkova
2004-02-10 13:38
2004.03.09
Кол-во User


1-25731
Mihalich
2004-02-27 00:22
2004.03.09
Работа с файлом смешанного типа.


14-25925
panov
2004-02-13 20:30
2004.03.09
О спасении девочки (по просьбе)


3-25680
КомофОнСамый
2004-02-10 19:34
2004.03.09
перетаскивание TitleButtion в RxLib


14-25882
Tarantul
2004-02-16 19:27
2004.03.09
Drag&Drop