将Visual Studio与Microsoft的C ++编译器一起使用,我们有几个源文件,它们使用特定于Microsoft的“#import”指令来导入类型库。例如:
#import my_type_lib.tlb
我想从源代码中删除#import,并将其替换为通过GNU Make执行的命令行步骤。在构建期间可以使用必要的接口定义(.idl源代码)。
如何删除对#import的依赖,并将其替换为可通过命令行执行的专用构建工具?
答案 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
。