#import эквивалент командной строки - PullRequest
4 голосов
/ 30 ноября 2009

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

#import my_type_lib.tlb

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

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

Ответы [ 2 ]

1 голос
/ 06 декабря 2009

Мне просто пришло в голову, что вы можете использовать компилятор напрямую для генерации файлов .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 из своей базы кода.

1 голос
/ 01 декабря 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...