Frage

In Visual Studio, wenn Sie foo.idl kompilieren, generiert MIDL die Proxy-Informationen in foo_p.c.

Leider ist für Win32 und x64-Dateien, verwendet es die gleichen Dateinamen. Für Win32, die Datei beginnt mit:

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

Für x64, die Datei beginnt mit:

#if defined(_M_AMD64)

Wenn Sie für Win32 bauen und dann sofort für x64 bauen, es ersetzt nicht die foo_p.c Datei, was bedeutet, dass das Projekt keine Verbindung herstellen kann.

Ich habe versucht, ein Pre-Build-Ereignis mit, den die foo_p.c Datei löscht, wenn es für die falsche Architektur ist, aber VS stört nicht einmal diesen Schritt auszuführen.

Wie soll ich es bekommen, so dass ich eine Konfiguration aufbauen kann und dann die andere?

War es hilfreich?

Lösung

Sie können die Compiler-Einstellungen für Ihre IDL-Datei ändern, um einen anderen Dateinamen für die Ausgabe Proxy-Datei angeben, nach der Zielplattform. (Wählen Sie Eigenschaften auf der IDL-Datei, dann Konfigurationseigenschaften / MIDL / Output).

  • Für Win32 baut Verwendung foo_p_w32.c
  • Für x64 baut Verwendung foo_p_x64.c

Dann in Ihren Win32 Projekteinstellungen, schließen Sie die Datei foo_p_x64.c und vice versa für das x64-Projekt.

Sie müssen das gleiche gilt für die _i.c Datei tun, sonst Visual Studio scheint nicht das IDL überhaupt neu zu erstellen.

Andere Tipps

Hier sind die Konfigurationsänderungen wir automatisiert verwenden, um zu ermöglichen Builds sauber arbeiten

Ändern

<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"
/>

und fügen Sie $ (SolutionDir) $ (Platform) , um Ihre C ++ Zusätzliche Verzeichnisse enthalten

z.

<Tool Name="VCCLCompilerTool" ...
AdditionalIncludeDirectories="...;&quot;$(SolutionDir)$(PlatformName);&quot;"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top