2011-08-10 17 views
1

埋め込み型ライブラリのないVB6標準EXEがあります。私はその実行可能ファイルからinteropアセンブリを生成し、.NETプロジェクトから参照したいと思います。これにより、.NETから実行可能ファイルで定義されたCOMクラスをインスタンス化できます。.NETプロジェクトのtypelib-less COM EXEの参照

タイプライブラリがないので、IDLをゼロから作成し、タイプライブラリを生成するためにMIDLを使用し、タイプライブラリから相互運用アセンブリを生成しました。 .NETプロジェクトからinteropアセンブリを参照できますが、COMクラスをインスタンス化することはできません。私は、私のinteropアセンブリは、EXEについて知りませんし、実際に私が呼び出すコードを実行することはできないと信じています。

VB6で定義されているCOMクラスを既に正常にインスタンス化していますActiveX DLL .NETから実装を含む対応するCOM DLLのClassIDを知っています。

私が作成しているIDLでは、ライブラリ定義のUUIDとして何を使用しますか?これは何とかEXEを参照すべきでしょうか?

[ 
    uuid(WHATUUID-SHOU-LDII-NCLU-DEHEREXXXXXX), 
    version(1.0), 
    helpstring("for TLB on EXE") 
] 
library MyExe { ... } 

Thesequestionsが接近しているが、私はまだこだわっています。私がしようとしていることは可能ですか?私はむしろ遅いバインディングを避けるだろう。助けてくれてありがとう。

答えて

2

interopライブラリはEXEについて知っているとは考えられていません。つまり、COMの動作です。サーバーがどのように起動されるのかを示すのはCLSIDキーです。 InProcServer32とLocalServer32。

あなた自身のIDLを書くときに間違っていることが何百もあります。あなたが型ライブラリを持っていない場合、インターフェイスとコクラスの適切なguidを推測することは自明ではありません。それが間違っている場合は、COMクラスを作成することはできません。私はかなりタイプライブラリがvb6 ActiveX .exesに埋め込まれていることを確信しています、私はそれを埋め込まないことを忘れているオプションはありません。確認するには、Visual StudioのFile + Open + Fileを使用し、.exeを選択します。埋め込まれたリソースが得られます。TYPELIBが表示されていればうれしいです。ノードを開き、ID 1を右クリックし、[エクスポート]を使用して.tlbファイルにエクスポートします。

+1

+1タイプライブラリが常にVB6に埋め込まれていることを確認しています。ActiveX EXE – MarkJ

+0

ActiveX EXEではなくVB6標準EXEであることを明確にするために質問を編集しました。私はEXEを開くと、Visual Studioは実際にタイプライブラリを表示しません。 – pizza247

+0

あなたがしようとしていることはできません、クライアントプログラムでActiveX EXEだけが使用できます。あなたがIDLのソースとして何を使用したのか、私は推測できません。 –

関連する問題