皆さんこんにちは
タイトル自体がルール違反のような気もしますが、良いタイトルが
見つからなかったので勘弁してください。
(1)
Unit1からUnit2の手続きを呼び出す。
Unit2から直接コントロールの値を取得する。
間違って送信してしまいました。すいませんm(__)m
続きです。
以下の記述は正しい方法なのでしょうか?
(1)別Unitの値を直接参照する。
Unit1からUnit2の手続きを呼び出す。
dm.setData;
Unit2から直接コントロールの値を取得する。
procedure dm.SetData();
var
str :String;
begin
str := Form1.Edit1.Text;
end;
(2)別UnitからUnit内の値を手続きを使って間接参照する。
Unit1からUnit2の手続きを呼び出す
dm.SetData;
Unit2からUnit1の手続きを呼び出す。
procedure dm.setData();
var
str :String;
begin
Form1.GetData(str);
end;
Unit1でUnit2にデータを渡す。
procedure Form1.GetData(var str:String);
begin
str := Edit1.Text;
end;
何でこんな質問と思われるかもしれませんが
dllで上記のような記述をするとエラーになってしまいます。
一般的にも上記のような記述はしないほうが良いのでしょうか?
Halbow です。
> 何でこんな質問と思われるかもしれませんが
はい、思います。
> dllで上記のような記述をするとエラーになってしまいます。
exe だと OK なんですか? dll だと Form1 や Form2 が自動生成されていないのでは?
> 一般的にも上記のような記述はしないほうが良いのでしょうか?
普通の記述だと思います。IntToStr() だって別ユニットの関数です。
Halbowさん こんにちは
ExeだとOKです。
ちなみにForm2ではなくてDataModuleです。
ってこの場合あんまり関係ないですが・・・すいません。
DataModuleは生成済みで確認しています。
Unit1 //
procedure Form1.Bottun1_Click();
var
intRec:Integer;
begin
if dm.GetrecCnt(intRec) = True then
begin
// ・・・
end;
end;
Unit2 //
procedure dm.getRecCnt(var RecCnt:Integer):Boolean;
begin
Result := True;
ds.CommandText := 'Select ・・・';
Try
ds.Active := True;
RecCnt := ds.RecordSet.RecordCount;
ds.Active := False;
except
Result := False;
ds.Active := False;
end;
end;
的なものは正常に動作します。
が、Unit2からUnit1のコントロールの値を直接参照したり
Unit2からUnit1の手続きを呼び出してUnit1の呼び出された
手続きからコントロールの値を参照すると「参照できない値」
で、エラーになります。
通常のExeならOKなので気にせず記述していたのですが、dll
だとエラーになりまして、一般的にこのような記述はいけない
のかなと思ったしだいです。
ツイート | ![]() |