これってルール違反?


Syake  2003-12-24 19:34:40  No: 6381

皆さんこんにちは
タイトル自体がルール違反のような気もしますが、良いタイトルが
見つからなかったので勘弁してください。

(1)
Unit1からUnit2の手続きを呼び出す。
Unit2から直接コントロールの値を取得する。


Syake  2003-12-24 19:46:59  No: 6382

間違って送信してしまいました。すいません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  2003-12-24 19:52:33  No: 6383

Halbow です。

> 何でこんな質問と思われるかもしれませんが

はい、思います。

> dllで上記のような記述をするとエラーになってしまいます。

exe だと OK なんですか? dll だと Form1 や Form2 が自動生成されていないのでは?

> 一般的にも上記のような記述はしないほうが良いのでしょうか?

普通の記述だと思います。IntToStr() だって別ユニットの関数です。


Syake  2003-12-24 20:31:33  No: 6384

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
だとエラーになりまして、一般的にこのような記述はいけない
のかなと思ったしだいです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加