COM и MIDL
От: Аноним  
Дата: 10.02.05 10:33
Оценка:
Всем Привет! Ребята подскажите пожалуйста.
Почему COM-объект не регистрируется в реестре при компилировании его с помощью MIDL?
Или его регистрацию нужно отдельно прописывать?
Подскажите пожалуйста,очень срочно нужно...
Re: COM и MIDL
От: Игорь Вартанов Ниоткуда  
Дата: 10.02.05 11:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему COM-объект не регистрируется в реестре при компилировании его с помощью MIDL?

А>Или его регистрацию нужно отдельно прописывать?

MIDL компилирует .idl и производит на свет кучку хэдеров, сишников и библиотеку типов. До COM-объекта еще очень, очень далеко. А до его регистрации — еще дальше.
---
С уважением,
Игорь
Re[2]: COM и MIDL
От: StudentOfShag  
Дата: 11.02.05 07:34
Оценка:
Здравствуйте, Игорь Вартанов, Вы писали:

ИВ>Здравствуйте, Аноним, Вы писали:


А>>Почему COM-объект не регистрируется в реестре при компилировании его с помощью MIDL?

А>>Или его регистрацию нужно отдельно прописывать?

ИВ>MIDL компилирует .idl и производит на свет кучку хэдеров, сишников и библиотеку типов. До COM-объекта еще очень, очень далеко. А до его регистрации — еще дальше.


В .idl файле описали интерфейс и кокласс

import "oaidl.idl";
import "ocidl.idl";

[ uuid(235501A0-4443-4959-8B94-F3874012DB15), version(1.0) ]
library NewCOMDll
{    
    [ uuid(6E826E41-450E-45ac-9ED3-3A615C79B408), version(0.1), object ]
    interface CNewInterface : IUnknown
    {
        HRESULT MyMessageBox();
    };

    
    [ uuid(8BC27C33-B500-4374-BE6F-119D36D70082)]
    coclass MyCoClass
    {
        [default,source]interface CNewInterface;
    };
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");
};


Да сгенерировал кучу хэдеров, сишников и библиотеку типов, как их зарегистрировать?
Re[3]: COM и MIDL
От: Игорь Вартанов Ниоткуда  
Дата: 11.02.05 08:27
Оценка:
Здравствуйте, StudentOfShag, Вы писали:

SOS>Да сгенерировал кучу хэдеров, сишников и библиотеку типов, как их зарегистрировать?


Обычно это делается так: собирается COM-модуль (скажем, mymodule.dll), после чего для него делается regsvr32 /s mymodule.dll
Необычно это тоже наверняка как-то делается, но это уже зависит от фантазии разработчика.
---
С уважением,
Игорь
Re[3]: COM и MIDL
От: algol Россия about:blank
Дата: 14.02.05 11:34
Оценка:
Здравствуйте, StudentOfShag, Вы писали:

SOS>В .idl файле описали интерфейс и кокласс


SOS>Да сгенерировал кучу хэдеров, сишников и библиотеку типов, как их зарегистрировать?


Скомпилированную .tlb можно зарегистрировать утилитой RegTlb.exe, исходники которой были где-то в VS или Platform SDK Samples:

#include <windows.h>
#include <iostream.h>

void main(int argc, char** argv)
{
    if(argc < 2)
    {
        cout << "Usage: regtlb tlbfile.tlb" << endl;
        return;
    }

    CoInitialize(NULL);

    OLECHAR psz[255];
    MultiByteToWideChar(CP_ACP, 0, argv[1], strlen(argv[1]), psz, 255);

    ITypeLib* pTypeLib;
    HRESULT hr = LoadTypeLibEx(psz, REGKIND_REGISTER, &pTypeLib);
    if(FAILED(hr))
    {
        cout << "LoadTypeLibEx failed." << endl;
        return;
    }
    else
        cout << "Type library registered." << endl;

    pTypeLib->Release();

    CoUninitialize();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.