1

私はこの質問が新しい既存の選択肢のために奇妙に見えるかもしれないことを知っていますが、理由があると私を信じてください。

mscommActiveXコントロールを使用してシリアルポートを介してQtと通信したいと思います。はい、QextSerialPort、QSerialDevice、およびシリアル通信コードの記述方法に関する多くの例があることを私は知っています。しかし、問題があるため、mscommをテストしたいと思います。

QtにActiveXコントロールを使用するシステムがあることは知っていますが、それらの使用方法に関する明確な情報が見つかりません(これに関するqtの公式ドキュメントがわかりません)。

Visual C ++ 6にはmscomm.hとmscomm.cppがあり、アクティブXインターフェイスを実装していると思いますが、どこにでもMicrosoftmfcマクロと依存関係がたくさんあります。

どんな手掛かり?

4

1 に答える 1

1

わかりました、私はそれを達成したようです。

実行するActiveXをラップするには、QAxObjectを使用する必要があります。そのためには、CLSIDを知っている必要があります。私の場合は:

  QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014");

次に、dynamicCall(QString、QVariant)を使用するだけで、ActiveXコントロールが持つメンバーのいずれかを呼び出すことができます。使用可能なすべてのメソッドのリストを生成するには、次を使用します。

  QString doc = activex->generateDocumentation();

これは素晴らしいことです。利用可能なすべてのメンバー、プロパティ、およびそれらの使用方法を説明する例を含むhtmlドキュメントを取得します(Qtドキュメントでは、 dumpdocを使用して同じ情報を生成できると記載されています)

ポート(ポート番号4)を開く方法の例を次に示します。

  QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014");
  activex->dynamicCall("SetCommPort(int)", 4);
  activex->dynamicCall("SetPortOpen(bool)", true);
于 2011-08-30T10:55:49.833 に答える