У меня есть ATL DLL с кучей простейших объектов ATL (= COM-объекты), все созданные мастером.Почему ProgId не создан для этих простых объектов ATL?
Файл IDL содержит множество интерфейсов и секции библиотеки, такие как это:
[
object,
uuid(00000000-0000-0000-0000-000000000000),
dual,
nonextensible,
pointer_default(unique)
]
interface IFoo : IDispatch{
[id(1)] HRESULT FooMethod();
};
[
uuid(00000000-0000-0000-0000-000000000000),
version(1.0),
]
library MyLib
{
importlib("stdole2.tlb");
[
uuid(00000000-0000-0000-0000-000000000000)
]
coclass Foo
{
[default] interface IFoo;
};
}
MSDN, кажется, говорит о том, что атрибут progid
должен быть автоматически генерируется для каждого компонентного класса. Однако в моем реестре их нет. DLL в противном случае полностью нормально регистрируется в каждой компиляции и может использоваться с COM-клиентов без каких-либо проблем.
Как это может случиться так, что progid
s не генерируются автоматически?
Это ловушка в мастере простого объекта ATL. Вы вводите «короткое имя», и все поля автоматически заполняются, никто не учитывает значения по умолчанию. Кроме одного, похоронен в правом нижнем углу. Ага. –