2012-03-28 3 views
1

Я работаю с двумя COM-проектами на основе ATL.Что решает, записывает ли RegisterTypeLib в win32 или win64?

Оба реализации DllRegisterServer, как только

STDAPI DllRegisterServer(void) 
{ 
    // registers object, typelib and all interfaces in typelib 
    return _Module.RegisterServer(TRUE); 
} 

который заканчивается вызовом

::RegisterTypeLib(pTypeLib, bstrPath, szDir); 

в atlbase.h: 6516.

Но по какой-то причине этот вызов делает один из проектов создания

HKEY_CLASSES_ROOT\TypeLib\<guid>\<version>\0\win64 

при регистрации с помощью regsvr32.exe на Windows 7 32 бит.

Другой проект правильно создает

HKEY_CLASSES_ROOT\TypeLib\<guid>\<version>\0\win32 

.

С какого места следует искать и исправлять это поведение?

ответ

4

Настоятельно возможно, что типология предназначена для платформы win64. Проверьте атрибуты typelibary. Можно получить доступ к ним с помощью ITypeLib::GetLibAttr:

ITypeLib::GetLibAttr(TLIBATTR **ppTLibAttr) 

Структура TLIBATTR имеет поле типа SYSKIND. Он содержит значение, указывающее платформу.

typedef enum tagSYSKIND { 
    SYS_WIN16 = 0, 
    SYS_WIN32 = (SYS_WIN16 + 1), 
    SYS_MAC  = (SYS_WIN32 + 1), 
    SYS_WIN64 = (SYS_MAC + 1) 
} SYSKIND; 

Я надеюсь, что это поможет решить проблему

+0

Да, это должно быть задано параметром командной строки midl.exe/env. –

+0

Спасибо. Это было именно так. –

1

Вы строите либо Win32 DLL или x64 DLL, а библиотека типа приложенного ресурс. Поскольку вы обнаружили, что проекты ATL используют API RegisterTypeLib, чтобы зарегистрировать библиотеку типов, а API будет регистрироваться по битте ресурса библиотеки (то есть, как правило, это оригинальная целевая платформа).

Я полагаю, вы получили регистрацию HKEY_CLASSES_ROOT\TypeLib\<guid>\<version>\0\win64 путем создания/регистрации конфигурации x64.

Другой возможной причиной является то, что в рамках проекта Установка в Visual Studio, под MIDL, генерального Target Environment установлен неправильно - это может в конечном итоге в регистрации Win32 DLL ресурса под win64 подразделу.

Смежные вопросы