ドームドライバを改修2

| コメント(0) | トラックバック(0)

前回の記事では、一応動いたが致命的な欠陥があると書いた。

まともに動作するのは、
・設定画面を出さずに使用するか、
・設定でCOMポートを選択するのは1回のみ
という条件がある。

致命的なのは、
設定画面を何度も出すと、ASCOMがエラーを出す。
エラーを出すだけならましな方で、
上位アプリ(MaxImDLやNINA)を巻き込んで落ちてしまう。
これはまずい。

20230929_1.png

これは、ASCOMが出すエラー画面。

何かごちゃごちゃした画面だが、COMポートのオープンに失敗したのだ。
COMポートのアクセスが拒否されたという、わかりにくいメッセージだ。
どうも設定画面を開く度にオープン処理へ飛んでいるようだ。
そして一度オープンすると、
そのままオープンしたままの状態ではないかと推測した。
このあたりの挙動がどうにもわからない。

ここは、オープン時の処理に例外処理を追加した。
(2つ下の画像で、上の大きい赤枠の部分が例外処理で改変した部分)

20230929_2.png

この例外処理にて、メッセージを簡略化し、
ASCOMには迷惑をかけないようにもなった。

20230929_3.png

しかし、劇的に改善したのは、小さいが2個目の赤枠に「?」を入れたこと。
これで、上位アプリ(MaxImDLやNINA)を巻き込んで落ちることはなくなった。
これで安心して使うことができる。

意味的にはデストラクタ(※)によりCOMポートをクローズする処理で、
nullでない場合にクローズするようにした。
これは、IF文でnullかどうかを判定しても同じことで、
C#はこんな書き方があるのかと感心したくらいだ。
(このドライバはC#で書かれている、VB.NETとは言語仕様が大きく違う)

※デストラクタとは、コンストラクタと対になっている。
今回の場合、
■コンストラクタ class Dome で記述して、
 COMポートの定義を行い、COMポートのオープン、通信を行う
■デストラクタ class ~Dome で記述して、
 COMポートの使用終了時に、OS(.Netframework)から呼ばれて
 リソースの開放等の記述をしておく
 C++ではデストラクタの呼び出しは可能だが、C#ではそれは出来ない
 デストラクタは省略も可能だが、
 リソースの開放を確実にするためには記述しておく
ということらしい。
これを読んで理解できる人は相当なものだ。
おいらはほんの少しだけしか分からない。
というか分かったようで何も分かっていないというのが正しい。

実を云うと、C#は触るのが今回初めてで、全くのド素人なのだ。
C#はC言語の親戚みたいなものという認識でしかない。

ズブのド素人がASCOMドライバをいじること自体が、そもそもおかしい。
ASCOMの神様がお怒りになるのもご尤もである。

とはいえ、今の世の中はDX推進の流れになってきている。
(DXはデラックスではないよ、多くの老人はデラックス派だけどなw)
DX推進の流れに乗って、還暦過ぎた爺が無謀な改修を行っている。
ASCOMの神様も大目に見てくれるとありがたい。

まあ自分一人が使うだけなので、そこは覚悟の上でってことで。
これで今の所は安定的に動作はしている。
ドームドライバの改修はこれにて終了とする。

トラックバック(0)

トラックバックURL: https://pikachu.ddo.jp/cgi-bin/mt/mt-tb.cgi/2002

コメントする

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.8.2

このブログ記事について

このページは、ピカチュウが2023年10月 2日 08:00に書いたブログ記事です。

ひとつ前のブログ記事は「仕事用の眼鏡を作成」です。

次のブログ記事は「カラーカメラを買おうと思ったが」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。