2

Visual C++ 2010 (Express) で COM コンポーネントを開発しようとしていますが、それを Visual C# 2010 (Express) プログラムから使用できるようにしたいと考えています。

私の COM DLL はまだ完成していませんが、DllRegisterServer関数とDllUnregisterServer関数を定義し、HKEY_CLASSES_ROOT とサブキーに多くのものを書き込みます。とりわけ、私は次の鍵を持っています:

HKEY_CLASSES_ROOT\My.Components.1\CLSID
    Default Value: {DB05EA30-0320-4D40-A530-6DEAD03D3850}

HKEY_CLASSES_ROOT\CLSID\{DB05EA30-0320-4D40-A530-6DEAD03D3850}
    Default Value: My Components
    Sub Key: InprocServer32
        Default Value: Absolute path of the .dll
        Threading Mode: Apartment
    Sub Key: ProgID
        Default Value: My.Components.1
    Sub Key: TypeLib
        Default Value: {DB05EA31-0321-4D41-A531-6DEAD03D3851}
    Sub Key: Version
        Default Value: 1.0

HKEY_CLASSES_ROOT\TypeLib\{DB05EA31-0321-4D41-A531-6DEAD03D3851}
    Sub Key: 1.0
        Sub Key: 0
            Sub Key: win32
                Default Value: Absolute path of the .tlb

Microsoft JScript は COM オブジェクトのインスタンス化を試みることができますが、ファクトリが不完全なため、DllGetClassObjectのエラー コードを出力するだけです。

一方、Visual C# 2010 (または少なくとも [参照の追加...] ウィンドウ) は、リストに表示されない登録済みの COM オブジェクトの存在に気付いていないようです。これらのオブジェクトが、インストールされた COM オブジェクトのサブセットにすぎないことは明らかです。

どの時点で COM オブジェクトが表示されるのでしょうか? 私は何が欠けていますか?

編集

[参照] タブについては知っていますが、最初に登録された COM オブジェクトは明示的に検索しなくても表示されるはずだと思っていましたが、そうではない可能性があります。

4

1 に答える 1