MIDL为/ env win32和/ env win64生成相同的文件

时间:2008-10-21 09:09:29

标签: visual-studio midl

在Visual Studio中,当您编译foo.idl时,MIDL会在foo_p.c中生成代理信息。

不幸的是,对于Win32和x64文件,它使用相同的文件名。对于Win32,文件以:

开头
#if !defined(_M_IA64) && !defined(_M_AMD64)

对于x64,文件以:

开头
#if defined(_M_AMD64)

当你为Win32构建然后立即为x64构建时,它不会替换foo_p.c文件,这意味着项目无法链接。

我尝试了一个预构建事件,如果它是错误的架构,则删除foo_p.c文件,但VS甚至不打算运行该步骤。

我该如何获取它以便我可以构建一个配置然后另一个配置?

2 个答案:

答案 0 :(得分:4)

您可以修改IDL文件的编译器设置,以根据目标平台为输出代理文件指定不同的文件名。 (在IDL文件上选择Properties,然后选择Configuration Properties / MIDL / Output)。

  • 对于Win32版本,请使用foo_p_w32.c
  • 对于x64版本,请使用foo_p_x64.c

然后,在Win32项目设置中,为x64项目排除文件foo_p_x64.c,反之亦然。

您需要对_i.c文件执行相同的操作,否则Visual Studio似乎根本不会重建IDL。

答案 1 :(得分:0)

以下是我们用于允许自动构建工作干净的配置更改

更改

<Tool
Name="VCMIDLTool"
TypeLibraryName="$(ProjectName).tlb"
OutputDirectory="$(SolutionDir)$(PlatformName)"
HeaderFileName="$(ProjectName)_h.h"
DLLDataFileName="$(ProjectName)_dlldata.c"
/>

<Tool
    Name="VCMIDLTool"
    TypeLibraryName="$(InputName).tlb"
    OutputDirectory="$(SolutionDir)$(PlatformName)"
    HeaderFileName="$(InputName)_i.h"
    DLLDataFileName="$(InputName)_dlldata.c"
    InterfaceIdentifierFileName="$(InputName)_i.c"
    ProxyFileName="$(InputName)_p.c"
/>

并将 $(SolutionDir)$(PlatformName)添加到您的C ++其他包含目录

e.g。

<Tool Name="VCCLCompilerTool" ...
AdditionalIncludeDirectories="...;&quot;$(SolutionDir)$(PlatformName);&quot;"