Всем Привет! Ребята подскажите пожалуйста.
Почему COM-объект не регистрируется в реестре при компилировании его с помощью MIDL?
Или его регистрацию нужно отдельно прописывать?
Подскажите пожалуйста,очень срочно нужно...
Здравствуйте, Игорь Вартанов, Вы писали:
ИВ>Здравствуйте, Аноним, Вы писали:
А>>Почему 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");
};
Да сгенерировал кучу хэдеров, сишников и библиотеку типов, как их зарегистрировать?
Здравствуйте, 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();
}