2009-11-30 3 views
4

Использование Visual Studio с компилятором Microsoft C++ имеет несколько исходных файлов, которые используют директиву «#import» для импорта библиотеки типов. Например:#import эквивалент командной строки

#import my_type_lib.tlb 

Я хотел бы, чтобы удалить #import из исходного кода, и заменить его на этапе командной строки будет выполняться с помощью GNU Make. Необходимые определения интерфейсов (исходный код .idl) доступны во время сборки.

Как я могу удалить свою зависимость от #import и заменить ее специальными инструментами построения, которые будут выполняться через командную строку?

ответ

1

Насколько я знаю, нет отдельных инструментов для генерации кода из типа lib.

Вы можете сделать #import один раз, а затем спрятать сгенерированные файлы и включить их в качестве обычных исходных файлов. Но тогда изменения в библиотеке типов потребуют новой контролируемой сборки для регенерации файлов.

Какие части генерируемой информации вы используете? Если вы используете это только для доступа к IID, интерфейсам и CLSID, и у вас есть .IDL, вы можете использовать MIDL.EXE для создания представления C++.

Если вы используете классы обертки (IxxxPtr), я думаю, что вам не повезло - они производятся #import.

+0

Bummer. Я заметил, что с помощью MIDL для компиляции .IDL выдает заголовочный файл и несколько исходных файлов (.C). Собирает ли исходные файлы и связывает их с проектом, эквивалентно # import'ing TLB? – 2009-12-01 16:01:24

+0

Только для получения определений интерфейса, IID и CLSID из typelib. Вы не получите обертки. –

2

Мне пришло в голову, что вы можете использовать компилятор непосредственно для создания файлов .tli/.tlh из библиотеки типов.

С помощью простого исходного файла, как этот

// imports.cpp 
#import "foo.dll" 
#import "bar.dll" 

int main(int argc, char* argv[]) 
{ 
} 

вы можете использовать cl.exe для создания #import оберток и бесполезную EXE-файл, например так:

...\>cl.exe imports.cpp 

С этого момента , #include обертки (foo.tlh/.tli) в вашем обычном исходном коде.

Не уверен, что это улучшение на #import, но, по крайней мере, вы извлекли #import из вашей базы кода.

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