visual-studio - visual - vs code autoclose html
MIDL genera el mismo archivo para/env win32 y/env win64 (2)
En Visual Studio, cuando compila foo.idl, MIDL genera la información del proxy en foo_p.c.
Desafortunadamente, para archivos Win32 y x64, usa el mismo nombre de archivo. Para Win32, el archivo comienza con:
#if !defined(_M_IA64) && !defined(_M_AMD64)
Para x64, el archivo comienza con:
#if defined(_M_AMD64)
Cuando compila para Win32 y luego compila inmediatamente para x64, no reemplaza el archivo foo_p.c, lo que significa que el proyecto no puede vincular.
Intenté tener un evento de preconstrucción que elimine el archivo foo_p.c si es para la arquitectura incorrecta, pero VS ni siquiera se molesta en ejecutar ese paso.
¿Cómo debería obtenerlo para poder construir una configuración y luego la otra?
Puede modificar la configuración del compilador para su archivo IDL para especificar un nombre de archivo diferente para el archivo proxy de salida de acuerdo con la plataforma de destino. (Seleccione Propiedades en el archivo IDL, luego Propiedades de configuración / MIDL / Salida).
- Para compilaciones de Win32, use
foo_p_w32.c
- Para las compilaciones x64, use
foo_p_x64.c
Luego, en la configuración de su proyecto Win32, excluya el archivo foo_p_x64.c
y viceversa para el proyecto x64.
Debe hacer lo mismo para el archivo _i.c; de lo contrario, Visual Studio no parece reconstruir el IDL en absoluto.
Aquí están los cambios de configuración que usamos para permitir que las compilaciones automáticas funcionen limpiamente
Cambio
<Tool
Name="VCMIDLTool"
TypeLibraryName="$(ProjectName).tlb"
OutputDirectory="$(SolutionDir)$(PlatformName)"
HeaderFileName="$(ProjectName)_h.h"
DLLDataFileName="$(ProjectName)_dlldata.c"
/>
A
<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"
/>
y agregue $ (SolutionDir) $ (PlatformName) a sus directorios de inclusión adicionales en C ++
p.ej
<Tool Name="VCCLCompilerTool" ...
AdditionalIncludeDirectories="...;"$(SolutionDir)$(PlatformName);""