none
.NETプロジェクトで、C#で作成したCOMコンポーネントを.NET アセンブリでなくCOMコンポーネントとして参照したい RRS feed

  • 質問

  • お世話になっております。

    C#で、COMコンポーネントを作成しました。VBAなどから利用できています。

    こちらを、別のC#プロジェクトでCOM扱いで参照しようとしたところ、.NET アセンブリとして参照するようにエラーが表示されてしまいます。

    慣れた Visual Studio 2013 の IDE で、COM としては変数型がどのようにエクスポートされているかなどを確認してみたいため COM コンポーネントとして参照をさせたいのですが、方法は無いものでしょうか?

    -------------------------------------------------------------------------------------------------------------

    '*****' への参照を追加できませんでした。

    ActiveX タイプ ライブラリ '*****.tlb' が .NET アセンブリからエクスポートされましたが、参照として追加できません。

    .NET アセンブリへの参照を追加してください。

    -------------------------------------------------------------------------------------------------------------



    2015年1月23日 5:17

回答

  • COMが再度.NETにインポートされた結果を参照しても確認にはなりませんから、COMのメタデータを参照するのが目的であれば専用のツールであるOLE/COM オブジェクト ビューアーを使用されてはどうでしょうか?
    • 回答の候補に設定 佐祐理 2015年1月26日 1:09
    • 回答としてマーク Always fresh 2015年1月26日 1:11
    2015年1月23日 5:45
  • OLEVIEWでは、残念ながら私が希望している、インターフェイスがエクスポートしているメソッド一覧および引数の変数型などを見ることができないようです(Windows Kit 8.0のものを利用)

    どういうことでしょうか?
    手元の OLE/COM Object Viewer で tlb ファイルを開くことができ、エクスポートしているインターフェースやメソッドの一覧を確認できました。
    OLE/COM Object Viewer の起動時に「登録に失敗」と出ているなら、管理者として実行することも検討してください。

    また、手元で試したのは tlbexp で出力したファイルを File - View TypeLib から選んでいます。
    スペースを含むパスを正しく解釈しないらしく、E_STG_NOTFOUND とか言われたので f:\tmp\test.tlb のような差し障りのないパスで実験しています。

    VBAからは利用できているので本来の開発目的は満たしており、私が開発したCOMコンポーネントが Excel その他のCOMコンポーネントへの参照と同列では Visual Studio上どのように見えるかを確認したかっただけですので、Visual Studio 2013 で私の希望する機能を有していないようでしたら、差し迫ったことでもないので諦めます。

    .NET アセンブリを COM 公開というケースでは、Visual Studio の .NET プロジェクトではそれを COM として受け入れませんので、オブジェクトブラウザで確認するということはできません。
    参照設定ができない以上、Visual Studio での見え方を気にする必要はないと思いますが、いかがでしょうか?

    • 回答としてマーク Always fresh 2015年1月26日 1:02
    2015年1月23日 14:40
    モデレータ

すべての返信

  • tlbexpというツールを使用するとアセンブリからエクスポートされるメタデータを.tlbファイルとして保存できます。
    2015年1月23日 5:21
  • 佐祐理様

    有難う御座います。

    残念ながら、tlbexpツールでエクスポートさせたtlbファイルを直接VisualStudioから参照させても、regasmで登録してCOMコンポーネントとして参照させても、前述のエラーが発生してしまいます。

    2015年1月23日 5:38
  • COMが再度.NETにインポートされた結果を参照しても確認にはなりませんから、COMのメタデータを参照するのが目的であれば専用のツールであるOLE/COM オブジェクト ビューアーを使用されてはどうでしょうか?
    • 回答の候補に設定 佐祐理 2015年1月26日 1:09
    • 回答としてマーク Always fresh 2015年1月26日 1:11
    2015年1月23日 5:45
  • 佐祐理様

    ご回答恐れ入ります。

    OLEVIEWでは、残念ながら私が希望している、インターフェイスがエクスポートしているメソッド一覧および引数の変数型などを見ることができないようです(Windows Kit 8.0のものを利用)。

    VBAからは利用できているので本来の開発目的は満たしており、私が開発したCOMコンポーネントが Excel その他のCOMコンポーネントへの参照と同列では Visual Studio上どのように見えるかを確認したかっただけですので、Visual Studio 2013 で私の希望する機能を有していないようでしたら、差し迫ったことでもないので諦めます。

    ご存知の方が、もしおられましたらご教示のほど宜しくお願い致します。

    2015年1月23日 6:11
  • OLEVIEWでは、残念ながら私が希望している、インターフェイスがエクスポートしているメソッド一覧および引数の変数型などを見ることができないようです(Windows Kit 8.0のものを利用)

    どういうことでしょうか?
    手元の OLE/COM Object Viewer で tlb ファイルを開くことができ、エクスポートしているインターフェースやメソッドの一覧を確認できました。
    OLE/COM Object Viewer の起動時に「登録に失敗」と出ているなら、管理者として実行することも検討してください。

    また、手元で試したのは tlbexp で出力したファイルを File - View TypeLib から選んでいます。
    スペースを含むパスを正しく解釈しないらしく、E_STG_NOTFOUND とか言われたので f:\tmp\test.tlb のような差し障りのないパスで実験しています。

    VBAからは利用できているので本来の開発目的は満たしており、私が開発したCOMコンポーネントが Excel その他のCOMコンポーネントへの参照と同列では Visual Studio上どのように見えるかを確認したかっただけですので、Visual Studio 2013 で私の希望する機能を有していないようでしたら、差し迫ったことでもないので諦めます。

    .NET アセンブリを COM 公開というケースでは、Visual Studio の .NET プロジェクトではそれを COM として受け入れませんので、オブジェクトブラウザで確認するということはできません。
    参照設定ができない以上、Visual Studio での見え方を気にする必要はないと思いますが、いかがでしょうか?

    • 回答としてマーク Always fresh 2015年1月26日 1:02
    2015年1月23日 14:40
    モデレータ
  • Azulean様

    今日は。有難う御座います。使い方を間違ってしまっていました。下記のような状態で無理だと早合点してしまいましたが、右クリック->View で ITypeLib Viewer を開いて確認することができるのですね。

    >「.NET アセンブリを COM 公開というケースでは、Visual Studio の .NET プロジェクトではそれを COM として受け入れませんので、オブジェクトブラウザで確認するということはできません。」

    C#のプロジェクト(アセンブリ)が別のC#開発のCOMコンポーネントをCOMのインターフェイスとして参照させる方法がなく、アセンブリとして読まれてしまうなら、自明にどう見えるか意味がない(そもそも無理)ことですね。

    お二方、どうも有難う御座いました。

      

    結論は

    「.NETプロジェクトで、C#で作成したCOMコンポーネントを.NET アセンブリでなくCOMコンポーネントとして参照したい」→これ自体が無理

    ですね。VBAで利用する場合の確認は、VB / VBA のオブジェクトブラウザで確認してみます。






    2015年1月26日 1:03