• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BCB6.0でのCOM設定方法)

BCB6.0でのCOM設定方法

このQ&Aのポイント
  • BCB初心者なので、BCBを使用してシリアル通信を行なっています。COM設定が不定な状態で使用することになり、設定できるようにしたのですがエラーが発生してしまいます。
  • 現在のコードでは、ポートの開閉に関する処理が行われていますが、エラーが発生しています。
  • また、COMポートの設定に関する部分でもエラーが発生しており、デバッガ例外が発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.2

>.cpp側で書けば値も取れ、動作できるのですが、 >.h側に書くと、フォーム上の内容が読めなくなります。 それは要はCommOpen()の定義内からフォームが見えてる(フォームのクラス定義と関数定義が同じスコープ内にある)かどうかですね。 CommOpen()をフォームのメンバにするのが一番手っ取り早い解決策です。※A //フォームのヘッダのprivate:以下に  bool CommOpen(); //フォーム(Form1とします)のソースファイル(.cpp)に  bool Form1::CommOpen() { ... } メンバにしないなら、そもそもCommOpen()の定義内でフォームメンバ(RadioButton1など)を直接参照することが(できないことはないんですが)、あまりきれいではないと思います。 それより、CommOpen()に引数としてポート名なりポート番号を渡すようにしたほうが良いように思います。もちろんケースバイケースなのですが。※B //bool CommOpen( int FChPort );とする //CommOpen()を呼び出すフォームのイベントハンドラで  CommOpen( RadioGroup1->ItemIndex +1 ); //ItemIndexは0始まり これならポートを開いたあとの処理を含め、実行関数群をフォームから独立したライブラリにすることも可能ですし。 とりあえず、※Aか※Bで問題なく動作するかテストしてみてください。 複数のフォームを使う場合は、フォーム間でポート番号のようなデータをどう受渡しするのかを検討する必要があります。 それはCommOpen()が成功してから改めて質問してください。

ev94-lo
質問者

お礼

※Aの方法を使ってみたところ無事解決しました! これで悩んでいた部分が解消されて一気に他の部分もできそうです。ありがとうございました! >フォーム間でポート番号のようなデータをどう受渡しするのかを検討する必要があります。 こちらの方は自分でもう少し考えて、それでもわからなかったら改めて質問させていただきます。 ありがとうございました。

その他の回答 (1)

  • KoHal
  • ベストアンサー率60% (110/181)
回答No.1

不明点がいくつかあります。補足してください。 >FChPort = StrToInt(RightStr(Unit1->RadioButton1->Caption,1)); ここでつかわれている"Unit1"はただしく定義されているのですか? つまり"Unit1"はRadioButton1を所有するフォームないしコンテナオブジェクトのポインタで間違いないのですか? そしてなぜ"Unit1->"が必要なのですか? ComOpen()はフォームとは別のユニットで定義されているのですか? COMポートを開く以前にTRadioButtonや文字列の扱いに問題があるような気がしますが、質問で提示されたコードだけからはどこが原因なのか判断が出来ません。 ただ、エンドユーザに開くポート番号を選ばせるならTRadioGroupをつかったほうが早いと思いますが。 それならTRadioGroup::ItemIndexで選択された番号が取得できます。 TRadioButtonをつかう必要があるなら、選択されたオブジェクトに対して //RadioButton1が選択されているとする hCom = CreateFile(  RadioButton1->Caption.c_str(),  GENERIC_READ | GENERIC_WRITE, 0, NULL,OPEN_EXISTING, 0, NULL ); これでいいような気がします。

ev94-lo
質問者

補足

回答ありがとうございます。 文字数の制限に気を取られて、説明不足になっていることに気づきませんでした。 >"Unit1"はRadioButton1を所有するフォームないし… →はい。当初は別フォームで行なおうと思っていましたが、できなかったために"Unit1"フォームへ移動してあります。 ただ、できれば別フォームに置きたいと思っています。 >なぜ"Unit1->"が必要なのですか? →"Unit1->"を入れないと、「未定義の関数RadioButton1を呼び出した」というエラーが出るために付けています。付けるとエラーは無くなりコンパイルできますが、動作時に読み込み違反があったというエラーがあったというエラーが発生します。 TRadioGroupに関してですが…忘れていました。TRadioGroupを使うように変更しました。 .cpp側で書けば値も取れ、動作できるのですが、 .h側に書くと、フォーム上の内容が読めなくなります。 おそらく、原因はここで、根本的に間違えてるだけな気がしますが、そこがどこかわからず非常に困っています…。 RadioButtonから修正前に教えていただいたプログラムにしましたが、やはり同様の現象が発生してしまいました。

関連するQ&A