我正在研究遗留的c ++ COM项目,我正在转移到Visual Studio 2010.在这个项目的IDL文件中,我必须从另一个c ++项目中引用一个ODL文件。我的问题是另一个项目生成其头文件为$(filename)_h.h。当我的IDL文件生成其头文件时,它会生成ODL文件名为$ filename.h,并且它无法引用正确的文件。
换句话说,在我的IDL文件(“MyIDLFile.idl”)中,我有一个声明,如
导入“MyODLFile.odl”
生成的文件(“MyIDLFile.h”)中的变为
当我需要它来生成
时如何指定我希望IDL在import语句中生成的文件名?
答案 0 :(得分:2)
我不确定你对import语句的意思,但你正在寻找的东西可以在项目的属性下找到。转到属性窗口(Alt-F7)并在“配置属性/ MIDL /输出”下,您将有机会声明要创建的头文件。由于您的项目是遗留的,因此从头文件名中删除“_h”可能更容易(例如$(ProjectName).h而不是$(ProjectName)_h.h)。有关详细信息,请参阅http://support.microsoft.com/kb/321274。
答案 1 :(得分:0)
这似乎是一个常见的问题,我找不到任何好的解决方案,但有一种解决方法是在你的idl文件中添加'_i',例如EquipmentConstants_i.idl
Microsoft确实引用了/ header编译开关,但我无法使其工作(midl /header switch)。
答案 2 :(得分:0)
这是处理IDL文件时要解决的常见问题。好消息是有几种方法可以解决这个问题:
您的最终解决方案可能会使用#1和#2。
MIDL编译器有several options来修改输出文件的名称或排除输出文件。
直接指定名称:
-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如何使用的建议。