掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Moduleをクラスに移行するには (ID:141840)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
① 変数のスコープ&クラスの寿命 IFCDIO?ですか、インターフェース社のライブラリ使っておられる ようにお見受けしますが・・・違いますか? 仮にインターフェース社のものとして、私も過去、モジュールで はなく、クラスに・・・と何度かメーカーに申し入れしたのです が残念ながら聞いてもらえなかったので自作しました。 で・・・ > Public Class FormMain > Private Sub FormMain_Load(省略) Handles MyBase.Load > Dim Dio3232 As Dio = New Dio > Dio3232.Init_DIO() ← Dioを初期化します > End Sub > End Class これだと、Hongliangさんが書かれたようにFormMain_Loadを 抜けたらDio3232インスタンスは破棄されますので・・・ Public Class FormMain Private Dio3232 as Dio Private Sub FormMain_Load(省略) Handles MyBase.Load Dio3232 = New Dio Dio3232.Init_DIO() End Sub Private Sub FormMain_FormClosing ... Dio3232 = Nothing End Sub End Class とするところなんですが、DioクラスをiDisposable属性を つけていないと、アクセスしていない時にGCで破棄されて しまう可能性がありますので、 Implaments iDisposable をDioクラスに付けたら・・・ よいと思います。これで私はうまくいってます。 ※ スペル間違っていたらすいません。 ② クラス内でのConst宣言 Hongliangが書かれている通りです。 固定値で変化しないなら・・・です。 ③ クラスからフォームに貼り付けたコントロールを使う フォームにコントロールを貼る場合も、自作シリアル通信 クラスを使うにせよ、どちらでもOKかと。 私は汎用性を求めて自作クラスにしてます。 画面の無いWindowsサービス中からでも通信が可能なように と、いろいろな機器との通信に利用できるように、派生させ て機能をオーバーライドし、機器専用通信機能として実現さ せてます。パフォーマンス的にもまず問題はありません。 がんばって下さい! ※ 参考まで インターフェースのDIOカードのドライバーは共有オープン すると、複数のインスタンスからのアクセスも可能ですが ビットをオンするのとオフするのが競合した場合、エラー が出ません。必ず最後に実行された方が結果となります。 また、マルチスレッドや複数のタイマー内で同一インスタ ンスのDIOをアクセスした場合も同様です・・・ よって、排他制御を入れてやる必要があります。 System.Threading.ReaderWriterLock を使って排他制御し てます。効果はほとんど解らないと思いますが・・・ 以上。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.