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

Вниз

Вопрос по DLL   Найти похожие ветки 

 
BJValentine ©   (2003-02-12 17:58) [0]

Создал DLL с формой. В итоге получилась процедура, возвращающая 3 значения с этой формы. Использую её (DLL) в программе. При первом вызове происходит всё нормально. Но после первого вызова при выходе с программы матюкается (Runtime error 217, а потом 216) и на этом всё заканчивается. И при вторичном вызове процедуры ругается. Что это может быть?

Фрагмент кода программы:
implementation

{$R *.DFM}
procedure GetSeq(var UserName:Pchar; Var Pwrd:Pchar; Var Finita: boolean); far; external "seq32.dll";

procedure TForm1.Button1Click(Sender: TObject);
begin
GetSeq(V1,v2,v3);
Edit1.Text:=StrPas(v1);
Edit2.Text:=StrPas(v2);
if V3
then Edit3.Text:="true"
else Edit3.Text:="false";
end;

фрагмент кода DLL:

var
Form1: TForm1;
v1,v2: PChar;
V3: boolean;
procedure GetSeq(var UserName: PChar; var Pwrd: PChar; var finita: boolean);export;
implementation

{$R *.DFM}
procedure GetSeq(var UserName: PChar; var Pwrd: PChar; var finita: boolean);
var SeqFrm: TForm1;
begin
try
SeqFrm:=TForm1.Create(Application);
SeqFrm.ShowModal;
UserName:=v1;
Pwrd:=v2;
finita:=v3;
finally
SeqFrm.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
V3:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
v1:=PChar(Edit1.Text);
v2:=PChar(Edit2.Text);
v3:=False;
Close;
end;


 
Ihor Osov'yak ©   (2003-02-13 02:01) [1]

ух, блин...

Правило первое и последнее, читать до посинения: пока не будет ясного понимания, что где создается, сколько времени живет, когда уничтожается, что скрівается за механизмом присваевания строк которые string и как работает присваивание для PChar, и что такое Application в dll, а что такое в основной программе ДО ТЕХ ПОР с ничем визуальным в dll не не работать. PChar не юзать. за StrPas забыть от сегодня и навсегда. Но это прелюдия. Напонминание на всяк случай.

А теперь по сути. Из исходного кода не понятно, как инициализируются в длл области памяти, на которые смотрят v1,v2,v3, которые в свою очередь (вернее их значения, показывающие на соотв. фрагменты памяти) через параметры GetSeq передаются в основную программу. Тем более, непонятно, где эта память освобождается. Может к моменту юзания этих значений в основной программе эта память уже освобождена.



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

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

Наверх




Память: 0.47 MB
Время: 0.015 c
1-19627
dimod
2003-03-25 14:10
2003.04.07
Вертикальный вывод текста в ячейку StringGrid


3-19478
SergeN
2003-03-19 10:52
2003.04.07
SQL


14-19780
Supreme 2
2003-03-16 23:38
2003.04.07
Вот что я решил


14-19810
iNew
2003-03-20 09:19
2003.04.07
Подскажите где взять хороший компонент для проверки CRC,


1-19569
isma
2003-03-25 09:34
2003.04.07
ListView-вопрос?