質問

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

私は、RTDの一部のため、これらのリソースが見つかりました: http://support.microsoft.com/?id=327215する そして http://support.microsoft.com/?id=327215する

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

しかしそれはExcelから私のアプリを介してデバイスに私のアプリ/プロキシコマンドを制御するいくつかの方法である後、私は必要があります。

何がそれを行うための最善の方法だろうか?

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

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

おかげ

EDIT 私は既存のEXEにCOMサポートを追加する選択肢を持っています。私は双方向通信を追加するために、より柔軟だと思います(クロスプラットフォームを - 多分ブーストまたはCORBAや私自身のメッセージプロトコルに基づいて、ただまっすぐIP)

COMサーバ(または2)その通信チャネルをラップすることができる - それが何であれ。これはdoesnの; tは本当にすべてで私の質問に影響を与える - 私はまだエクセルからの外部EXEを制御するためのオプションを知りたいのです。

EDIT 顧客に.NETを展開する必要がないことも大きなプラスです。これらのデバイスの多くはかなり古く、おそらくNTまたはXPそれらの上に持っているPCであると私は、.NETサイズをインストール/私のセットアップを増やす楽しむばかげに700キロバイトからパッケージをインストールしないでください...

役に立ちましたか?

解決

オプション#1:

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

(1)秀でるために、独自のツールバーを追加し、(2)あなたのCOMサーバーを呼び出すために、ExcelのVBマクロを書きます。

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

オプション#2:

私はあなたのC#を使用しないことを実現 - しかし、オフィスの自動化、およびCOMオブジェクトに話すことはオフィス(VSTO)のVisual StudioツールをC#で、本当に、本当に簡単です。あなたは本当に、このオプションを調べるshoul - 正しく行わ場合は、それはあなたの既存のコードのいずれかを再書き込みを意味してはいけません。ただ、ExcelとRTDサーバー間のブリッジとしてC#とVSTOを使用します。 VB、そのストレート偏屈と同様のC#にして、RTDサーバーにExcelのUI要素を接続します。

他のヒント

VBAからCOMオブジェクトを呼び出すことは簡単です。これは SOの質問と私の答えのCOMオブジェクトを作成する方法の例を与えます。公開されたメソッドを呼び出すと、あなたが期待するようになります:

object.ExposedMethod(optional params...);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top