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

Rog*_*mbe 5 midl visual-studio

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

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

#if !defined(_M_IA64) && !defined(_M_AMD64)
Run Code Online (Sandbox Code Playgroud)

对于x64,文件以:

#if defined(_M_AMD64)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Chr*_*isN 4

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

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

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

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