#import命令行等效

时间:2009-11-30 19:19:43

标签: c++ visual-studio com import visual-c++

将Visual Studio与Microsoft的C ++编译器一起使用,我们有几个源文件,它们使用特定于Microsoft的“#import”指令来导入类型库。例如:

#import my_type_lib.tlb

我想从源代码中删除#import,并将其替换为通过GNU Make执行的命令行步骤。在构建期间可以使用必要的接口定义(.idl源代码)。

如何删除对#import的依赖,并将其替换为可通过命令行执行的专用构建工具?

2 个答案:

答案 0 :(得分:1)

据我所知,没有单独的工具可以从类型lib生成代码。

您可以执行#import一次,然后将生成的文件存储起来并将其作为常规源文件包含在内。但是,对类型库的更改需要一个新的监督构建来重新生成文件。

您使用的生成信息的哪些部分?如果你只使用它来获取IID,接口和CLSID,并且你有.IDL,你可以使用MIDL.EXE来生成C ++表示。

如果您正在使用包装类(IxxxPtr),我认为您运气不足 - 这些是#import生成的。

答案 1 :(得分:1)

我刚想到您可以直接使用编译器从类型库生成.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