0

管理されていないC++で記述されたCOMDLLがあり、VS 2010でコンパイルされています。ベランダ32を使用してDLLを登録し、VBscriptを介して呼び出すことができます。

C#クライアントの作成中に参照を追加しようとすると、[参照の追加]->[COM]タブにCOMオブジェクトが表示されません。手動でDLLを参照して選択しようとすると、DLLが有効なアセンブリまたはCOMコンポーネントではないことが示されます。

これで、tlbimpツールを使用して相互運用機能DLLを生成し、それを使用してC#クライアントへの参照として追加できます。そして、すべてが正常に動作します。

私の質問は次のとおりです。

  1. 元のCOMが、zippy32を介して登録されたときに、[参照の追加]ダイアログの[COM]タブに表示されないのはなぜですか?
  2. VBScriptおよびC++ネイティブコードから呼び出すことができるのに、VS IDEが有効なCOMではないと考えるのはなぜですか?
  3. IDEができないtlbimpは正確に何をしますか?
  4. ここでのタイプライブラリと相互運用性についての理解を深めるために、さらに何を読む必要がありますか?
4

1 に答える 1

2

typelibの問題のようです。COMクラスは正しく登録されている可能性がありますが、typelibはおそらく正しく登録されていません。DllRegisterServer関数内からRegisterTypeLibを呼び出すのを忘れたのではないでしょうか。

あなたの質問を参照してください:

  1. ダイアログは、COMクラスではなく、登録されたtypelibを検索します

  2. VBscriptはIDispatchを呼び出し、typelibを気にしません。tlbimpはIDispatchを気にせず、typelibを必要とします

  3. DLL名をtlbimpに渡したので、tlbimpはtypelibを取得する方法を知っていました。対照的に、VSは適切な登録データがないレジストリを指します

于 2012-07-27T16:29:18.170 に答える