Предположим, у нас есть макрос ‘HELLO’, определенный в файле .cpp, и мы создали из него файл .tlb. Когда я импортирую этот файл .tlb в другой проект C ++, я получаю доступ к этому макросу?
По умолчанию, если макрос определен в файле .c, область действия находится внутри этого файла. Если макрос определен в файле .h, то каждый, кто его включает, имеет доступ к макросу. Просто интересно, если поведение такое же даже через файл .tlb … /
Библиотеки типов хранят только информацию о типах (интерфейс & объявления классов, typedef, другие метаданные), а не код. Реализация кода определяется внутри соответствующей библиотеки (DLL) или сервера (EXE). Это означает, что библиотеки типов говорят только клиентам где найти код. Они не предоставляют код. Вот почему макросы не могут быть экспортированы в TLB.
Как сказал Ашратт, макросы не хранятся в библиотеках типов. Однако, если ваши макросы являются целочисленными константами, вы можете использовать перечисления в файле IDL:
enum Colors
{
White = 1,
Yellow = 2,
BLue = 3
}
Это работает со всеми языками. Например, если вы используете библиотеку типов в C #, вы видите перечисление как перечисление C #.
И если библиотека типов предназначена только для использования конкретным клиентом C ++, вы можете использовать cpp_quote Атрибут IDL для генерации кода в сгенерированном заголовке, а затем с помощью директивы #include для включения этого заголовка вместо использования #import для создания нового заголовка на основе библиотеки типов.