如何使用MIDL生成x86和x64代码?

时间:2012-08-25 19:23:16

标签: midl

如何使用MIDL生成x86和x64的代码?

我在Visual Studio 2010中创建了一个IDL文件,当我在x86模式下编译产品时,之后在x64中,我必须“触摸”IDL文件,以便重新生成与x64相关的代码。我可以告诉MIDL将两个代码生成到同一个文件中吗?

3 个答案:

答案 0 :(得分:0)

IDL文件定义了一个接口,该接口可以使用64位平台功能或32位平台功能。 IDL可用于生成存根;如果接口没有特定于32位平台的定义或特定于64位平台的定义,则可以生成假定存根(即一个IDL文件)。但是,这取决于您所暴露的接口。简短回答:如果您将接口定义为32位和64位兼容,则不需要两个不同的IDL文件 - 否则您需要两个不同的IDL文件。

不知道什么是“触摸”(通常意味着更新文件的日期/时间,w.r.t。软件工程)意味着,很难具体说明你需要做什么。

答案 1 :(得分:0)

如果您指的是Generated Files文件夹下的文件,如果您更改的是目标平台,则不会看到它们发生更改(除非您在使用平台的IDL中放置了#ifdef块,否则具体定义)。请记住,MIDL的输出是源代码,而不是二进制文件。生成的代码中使用的数据类型的名称不会更改,因此即使编译器所针对的机器体系结构不同,MIDL的输出也是相同的。

您可以通过制作XXX_i.h和XXX_i.c文件的副本并在平台之间进行比较来验证这一点。为此,构建,制作副本,重建,然后比较文件;唯一不同的是时间戳。

所以,回到原来的问题:你已经在做了!

答案 2 :(得分:0)

我知道这是一个老问题,但如果其他人在这里遇到这个就是我如何解决它。

在包含IDL文件的项目中,我向所有删除MIDL输出文件的平台和配置添加了一个预构建事件,如下所示......

if exist $(ProjectName).h del $(ProjectName).h
if exist $(ProjectName)_i.c del $(ProjectName)_i.c
if exist $(ProjectName)_p.c del $(ProjectName)_p.c

我本可以删除代理(_p)文件,因为这是唯一特定于平台的MIDL生成文件。

如果您的代理存根源文件具有不同的名称或扩展名,请使用这些文件。