1

デバイスコントローラー(rs232)を作成しましたが、正常に使用されていますが、ユーザーはExcelからデータを表示し、デバイスを制御(またはプログラムを介して通信)したいと考えています。オプションとしてDDEを却下し、RTD(IRtdServer)がおそらく良いスタートであることがわかりました(ただし、リアルタイムデータクライアントから「サーバー」にデータを送り返す方法はありません)。

RTD部分の次のリソースを見つけました: http ://support.microsoft.com/?id=327215 および http://support.microsoft.com/?id=327215

これはマルチスレッドアプリであり、複数のクライアントを更新できるように、comポートに複数のリスナーを持つ機能をすでに追加していました。COMインターフェイスをEXEに追加します。

しかし、その後に必要なのは、Excelからアプリを介してデバイスへのアプリ/プロキシコマンドを制御する方法です。

それを行うための最良の方法は何でしょうか?

おそらく別のCOMインターフェイスで、VBAなどから呼び出していますか?私はExcelからのスクリプトの使用に慣れていないので、おそらく誰かがCOMオブジェクトのコードと付随するVB(A?)コードの両方を示すサンプルコードまたはリンクを提供できますか?

これはアンマネージC++アプリケーションであり、現在マネージドまたはC#に変換できないことに注意してください。C#を使用する代替手段も歓迎されますが、それは長期的な書き直しです。

ありがとう

編集既存のEXEにCOMサポートを追加する代わりの方法があります。双方向通信を追加する方が柔軟だと思います(クロスプラットフォーム-おそらくブーストまたはコーバ、あるいは私自身のメッセージプロトコルに基づくストレートIP)

COMサーバー(または2つ)は、その通信チャネルをラップできます-それが何であれ。これは私の質問にはまったく影響しません-Excelから外部EXEを制御するためのオプションを知りたいのですが。

編集.NETを顧客に展開する必要がないことも大きなプラスです。これらのデバイスの多くはかなり古いPC上にあり、おそらくNTまたはXPが搭載されており、セットアップ/インストールパッケージを700KBからばかげた.NETインストールサイズに増やすのは好きではありません...

4

2 に答える 2

1

オプション1:

小さなCOMサーバーを作成します-そのインターフェイスがExcelで構築されたVisualBasicエンジンを使用したスクリプトに適していることを確認します。(たとえば、単純型とBSTRSを使用します)。

Excel VBマクロを作成して、(1)Excelに独自のツールバーを追加し、(2)COMサーバーを呼び出します。

ボタンやその他のUI要素をシートに追加して、それらをVBマクロに接続することもできます。

オプション#2:

C#を使用したくないことは承知していますが、Officeの自動化とCOMオブジェクトとの通信は、Visual Studio Tools for Office(VSTO)を使用したC#では非常に簡単です。あなたは本当にこのオプションを検討する必要があります-正しく行われた場合、それは既存のコードのいずれかを書き直すことを意味するべきではありません。ExcelとRTDサーバー間のブリッジとしてC#とVSTOを使用するだけです。VBと同様に、ExcelのUI要素をC#に接続し、次にRTDサーバーに接続します。

于 2008-12-29T04:52:55.513 に答える
1

VBAからCOMオブジェクトを呼び出すのは簡単です。このSOの質問と私の回答は、COMオブジェクトを作成する方法の例を示しています。公開されたメソッドの呼び出しは、予想どおりです。

object.ExposedMethod(optional params...);
于 2008-12-29T04:53:21.610 に答える