Мой первый импорт COM


У меня есть .H файл со следующими объявлениями:

////////////////////////////////////////////////////////////////////////////////
// Syntek Plug-In Custom Control GUIDs.                                       //
////////////////////////////////////////////////////////////////////////////////
// {59DF6360-6F14-4472-82B6-6EAB971EEFAD}
DEFINE_GUID(CLSID_IStkCustomControl,
            0x59DF6360, 0x6F14, 0x4472, 0x82, 0xB6, 0x6E, 0xAB, 0x97, 0x1E, 0xEF, 0xAD);

// {59DF6361-6F14-4472-82B6-6EAB971EEFAD}
DEFINE_GUID(CLSID_IStkCustomControl_PropertyPage,
            0x59DF6361, 0x6F14, 0x4472, 0x82, 0xB6, 0x6E, 0xAB, 0x97, 0x1E, 0xEF, 0xAD);

// Custom Control Interfaces.
MIDL_INTERFACE("59DF6360-6F14-4472-82B6-6EAB971EEFAD")
IStkCustomControl : public IUnknown
{
public:
    virtual HRESULT STDMETHODCALLTYPE Get(PKSPROPERTY_STK_CUSTOM_CONTROL_S pStkCustomControl) = 0;
    virtual HRESULT STDMETHODCALLTYPE Set(PKSPROPERTY_STK_CUSTOM_CONTROL_S pStkCustomControl) = 0;
};

Я хотел бы перенести интерфейс IStkCustomControl на C#. До сих пор у меня есть этот код C#:

Guid guid = new Guid(0x59df6360, 0x6f14, 0x4472, 0x82, 0xb6, 0x6e, 0xab, 0x97, 0x1e, 0xef, 0xad);
Type type = Type.GetTypeFromCLSID(guid); // line 2 
object obj = Activator.CreateInstance(type);

При выполнении строки 2 я получаю исключение

Создание экземпляра COM-компонента с CLSID {59DF6360-6F14-4472-82B6-6EAB971EEFAD} из IClassFactory произошел сбой из-за следующей ошибки: 80040202.

Что здесь не так?

Обновление: я обнаружил, что интерфейс IStkCustomControl реализуется в файле под названием StkProp.ax. Я пытался бежать AxImp.exe StkProp.ax, но это дало мне

Ошибка AxImp: ошибка загрузки библиотеки типов / DLL. (Исключение из HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))

1 4

1 ответ:

Чаще всего информация о типе встроена в библиотеку DLL, реализующую объект. Используйте OLEView, чтобы убедиться. Если да, то установите ссылку COM на эту библиотеку DLL и используйте автоматическую обертку.

Наличие информации о типе в виде автономного файла TLB - это так поздно.