- - PR -
起動中の.NETアプリケーションにCOMコンポーネントからアクセス
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-23 14:06
こんにちは。
以下のようなことを実現したいと考えています。 −−−−−−−−−−− 起動中の.NETアプリケーションがある。 そのアプリが保持する変数に、COMコンポーネントからアクセス(値の取得や変更)する −−−−−−−−−−− アンマネージコードとの相互運用に関するMicrosoftのヘルプやサンプルを調べてみたのですが、COMコンポーネントから.NETのインスタンスを生成して利用する例ばかりで、既に生成されているインスタンスを取得するような例は見当たりませんでした。 上記のような要求が実現できるのか、できるならMicrosoft推奨の実現方法はどんなものか、を調査しています。 何か情報をご存知の方、教えていただけないでしょうか。 よろしくお願いします。 --- WindowsXP .NET Framework 1.1 | ||||||||||||
|
投稿日時: 2006-01-23 18:08
起動中のアプリケーション(.NET)には
プロセス通信用の受け口は無いんですよね... だとしたら、実現は難しいと思います。 | ||||||||||||
|
投稿日時: 2006-01-23 18:59
その後、技術サンプルを見つけたので調べてみましたが、いずれも.NETかCOMが相手を生成して使うようなつくりでした。(多分)
MSDN Online:COM の相互運用性に関するサンプル http://msdn2.microsoft.com/ja-jp/library/cxcz83xf.aspx >かるあさん 返信ありがとうございます。 既存のアプリを機能拡張して、新たにCOMコンポーネントからアクセスできるように機能拡張する目的で調査しています。(現状ではプロセス間通信の口は持っていません) プロセス間通信ですか。。。 その観点でも調べてみます。 | ||||||||||||
|
投稿日時: 2006-01-23 19:21
「そのように」アプリケーションが作られていないと出来ないからです。 Excel や Word に対して「そういうこと」が出来るのは、それらのアプリケーションが「OLE オートメーション」に対応しているからです。 .NET Framework の標準ライブラリは「OLE オートメーション」をサポートしていないので、自力で作りこむのはかなり大変です。 一方、.NET 標準のアプリケーション間通信方法は「リモーティング」になりますが、VB6 以前や MFC, ATL などは登場順から考えても当然のことですが、「リモーティング」をサポートしていません。 よって
を実現するには ・.NET アプリケーションをリモーティング対応に改修する ・↑と通信する COM を C++/CLI で記述する とするのが比較的簡単です。 | ||||||||||||
|
投稿日時: 2006-01-23 20:13
>渋木宏明(ひどり)さん
返信ありがとうございます。
上記のようなことはできないのでしょうか。 と言うのは、周りの人間から 「VB6.0では、COMのクラスのinstancingプロパティをmultiuseにしておいて、外部アプリでCreateObjectするとインスタンスを取得できる。」 と聞いています。(表現は正確ではないかもしれません。) .NETではMultiuseをサポートしている(※1)とのことなので、同じようにできるのではないかと考えていたのですが。
もちろん、この方法も参考にさせていただきます。 よく知らないのでこれから調べます。。。 ※1:MSDN Online「Visual Basic .NET におけるコンポーネントのインスタンス化の変更点」 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconhowvisualbasic60instancingmapstovisualbasic70.asp | ||||||||||||
|
投稿日時: 2006-01-24 01:05
技術的には可能です。 ですが、既に述べたように .NET の標準クラスライブラリは OLE オートメーションをサポートしていないので、Visual Studio の IDE をちょいちょいいじって、ほんのわずかなコードを追加したくらいでは実現できません。 大部分を自分で作り込む事になります。
あくまで一例です。 要するにプロセス間通信が出来ればいいだけなら、ウィンドウメッセージを使うのでも構わないと思います。 | ||||||||||||
|
投稿日時: 2006-01-24 08:57
そもそも今回の調査目的は、前述の要求に対して、どのような実装方法をとるのが正しいかを調べるものでした。 Microsoft推奨の方法があれば一番良いのですが、そんなドキュメントはないのですかね。。。 考えられる実装方法(リモーティング、ウィンドウメッセージ、OLEオートメーション)を挙げる方向で調査を進めようかと思います。 他にも考えられる実装方法はあるのでしょうか。プロセス間通信について調べればいいのかな? 良ければアドバイスお願いします。 ありがとうございます。 | ||||||||||||
|
投稿日時: 2006-01-24 09:38
あなたが示した仕様(=VB6...)は「OLE オートメーション」そのものを指し示しています。
必要なのは「OLE オートメーション」ですか? それとも、COM オブジェクトと .NET アプリケーションの連携機能ですか? その辺がはっきりしないと、何を提示すればよいのか分かりません。 .NET アプリケーションに OLE オートメーションの機能を実装するのはあまり現実的ではないと思います。 「.NET における標準的な手法」としては、既に「リモーティング」挙げました。 |