http://homepage1.nifty.com/emk/vmselect.html
Java VM Selector for IE v0.91
自分の日記のリンク元に?があったので気興味を持って開いてみると、まだ回答できるようなので...回答するのは初めてなので不手際があったら申し訳ありません。
URL は C++ ですが、Internet Explorer から起動される Microsoft VM を Java Plugin の Java VM に置き換えるというものです。
目的とする COM コンポーネントがブラウザで閲覧できるということですので、目的とするコンポーネントが持つ COM Interface も判明していることと思います。
このような置き換え手法を利用することで、「アプリケーション⇔自作COMオブジェクト⇔本物のCOMオブジェクト」というメソッド呼び出しの関係を作成することは容易であることはわかりますか?
この時点で「どのメソッドがどの順番で呼び出されるか」というアプリケーション操作と時間軸の対応、そしてそれに伴うすべての引数の実値を確認するのは容易ですよね。
http://www.microsoft.com/japan/msdn/net/bda/cominterop.asp
ご指定のページが見つかりません
次のURLは .NET ⇔ COM に関する文章です。
C# を利用されているということですので、このような仕組みの助けを借りなければ .NET の世界と COM の世界は接続しません。
そして、この文章から単純に C# だけによって前述のような CoClass オブジェクトの置き換えは実現できないということがわかると思います。
もし、開発環境として .NET Framework SDK ではなく Visual Studio.NET や Visual C#.NET といった製品を利用されているならば、C++ コンパイラが付属していると思いますので、C# でできない部分だけ……もしくはすべて……を C++ で記述することになるかと思います。
(当然、他の開発環境……Delphiとか……があれば、それでも問題ありません)
また、C# によって前述のようなメソッド呼び出しの関係を作成すると、COM(CLIENT)⇔CCW⇔.NET⇔RCW⇔COM(SERVICER) というような関係になります。
3番目の URL は、そのような状況に関するやり取りです。
以上、参考になれば。
APIの公開されていないCOMオブジェクトであっても
VCやBCBでActiveXの取り込みを行うことで関数や、定数を取り込むことがで来ます
それを利用してサンプルプログラムを作って見てはいかがですか?
http://www.st.rim.or.jp/~k-kazuma/SI/SI521.html
私の得意技:逆アセンブルしながら処理内容を解析
リバースエンジニアリングは通常禁止されています。ま、それはおいて置いて。隠しAPIとのやり取りを探るというような事でよろしいでしょうか?
例えばMS系の開発ツールで言うと、
Dependency Walkerなどで、どのCOMを参照しているかを確認し、spy++などのツールでプロセスやクラスを確認することによりある程度の内容はわかったりしますが…。
逆アセンブルのプロはURLみたいな手順を踏むみたいです。
ありがとうございます。非常に参考になります。
隠しAPIというかはよくわかりませんが、とりあえず、複数のDLLファイルがEXEと同じフォルダにあって、VSのオブジェクトブラウザでクラスの一覧は参照できます。ある動作、たとえばあるオーダーを執行したときに、どういうデータがどのCOMへどのような信号を送っているのか解析して、外部のアプリケーションからその動作をエミュレートし、その挙動は外部アプリからコントロールできるようにする、といった事が目的なのですが、このエミュレートという部分が可能なのか?という疑念もあります。引き続き詳しい方のアドバイスをお待ちしております。
http://d.hatena.ne.jp/ladybug/200312
is BUG ready ?
ん〜。前のレスを見て…。
ようするにイベントをハンドリングしたいだけかな?とか思うのですが…。
C#さわったことないので、詳しく検索できませんでした。おそらくこの手の情報であれば、リーバスエンジニアリングなどのような言葉で探すのではなく、ハンドリングとかキャプチャリングで、C#コミュニティで聴いてみた方がサンプル等あって判りやすいかと思います。
http://www.antoine.st/EventFromVisualBasicComponent.html
Event From Visual Basic Component
てきとうに…。C#ハンドリングでひっかかったサイトをご紹介。
例えばイベントをハンドリングして、COMに送る前に情報を受け取って、加工してから、Sendmaseageで、おくっちゃうなんてやり方もできると思いますよ。
…関数仕様がわからないとキツイか…。
図にしてみると
既存アプリケーション−−−−−COM
自作アプリ−−−−−」
のようにCOMを共有して処理をわりこませたいということです。NETでターゲットのCOMを参照すると、自分のディレクトリにコピーを置いているのでイベントも読めないようです。まずはこの共有COMとかいうところから調べていかないとだめかなとか思っています。
回答ありがとうございます。
今C#.netを使っていて、そのCOMはオブジェクトブラウザですべてクラスは閲覧できます。それを利用して0からある程度動くものを自作しようと心見ましたが、ものが複雑でSDKのドキュメントなしでは無理です。私が要望しているのは、静的なCOMのクラスビューとかではなく、リアルタイムで現行のアプリケーションがどういうデータのやり取りをしているかトレースできるものです。
また、内容が解析できたとして、そこに外部のアプリケーションが信号を挿入する事は可能なのか?という事も識者の方にご教授していただければありがたいです。