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

Вниз

Помогите разобраться в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-25810
REVERSE
2004-02-25 23:43
2004.03.09
Слежение за подключениями программ к и-нету


9-25675
Sacred
2003-08-20 02:34
2004.03.09
Direction и Position у GLCamera???


1-25748
independant
2004-02-19 11:23
2004.03.09
Обработка событий в приложении без формы.


14-25929
Soft
2004-02-15 00:48
2004.03.09
С Linux может работать даже женщина.


14-25876
Creator
2004-02-17 13:51
2004.03.09
Handle





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