这是处理 IDL 文件时要解决的常见问题。好消息是有几种方法可以解决这个问题:
- 使用 MIDL 编译器的选项来更改生成的输出
- 分层您的组件,以便在不同的路径中编译冲突的文件。您还可以控制生成文件的发布方式。然后,需要包含它的代码可以控制文件的包含位置。
您的最终解决方案可能会使用一些#1 和#2。
MIDL 编译器有几个选项可以修改输出文件的名称,或排除输出文件。
直接指定名称:
-OUTPUT FILE NAMES-
/cstub filename Specify client stub file name
/dlldata filename Specify dlldata file name
/h filename Specify header file name
/header filename Specify header file name
/iid filename Specify interface UUID file name
/proxy filename Specify proxy file name
/sstub filename Specify server stub file name
/tlb filename Specify type library file name
跳过输出文件:
-OUTPUT FILE GENERATION-
/client none Do not generate client files
/server none Generate no server files
/notlb Don't generate the tlb file
我个人过去曾使用 /prefix 选项来避免标题的名称冲突。
/no_default_epv Do not generate a default entry-point vector
/prefix client str Add "str" prefix to client-side entry points
/prefix server str Add "str" prefix to server-side manager routines
/prefix switch str Add "str" prefix to switch routine prototypes
/prefix all str Add "str" prefix to all routines
这是一个例子:
/prefix client HIDE_
带有方法 foo 的接口将在标题中重命名为 HIDE_foo。
另一个有效的策略与您如何分层目录、构建顺序和发布文件以及使用包含路径以及对实际包含进行排序有关。我只习惯于将源文件与 dir 文件和 build.exe 一起使用,所以我无法给出任何建议如何与 VS 一起使用。