Adressierung von Stubs für bestimmte 32-Bit- oder 64-Bit-Plattformen

Einige der Features von Microsoft RPC und die MIDL-Compiler 3.0 und höher sind plattformspezifisch.

Als Vorsichtsmaßnahme generieren die MIDL-Compiler 3.0 und höher Schutzvorrichtungen, die die Kompatibilitätsprüfung während der C-Kompilierungsphase erleichtern. MIDL generiert zwei Arten von Schutzvorrichtungen: einen plattformabhängigen Schutz (32-Bit im Vergleich zu 64-Bit) und einen releaseabhängigen Schutz (Funktionssatzabhängigkeit). Midl generiert beispielsweise den folgenden Schutz, um die C-Kompilierung eines 32-Bit-Stubs für andere Plattformen zu verhindern:

#if !defined(__RPC_WIN32__)
#error  Invalid build platform for this stub.
#endif

Der releaseabhängige Schutz wird durch eine Reihe von Features ausgelöst, die in den verarbeiteten IDL-Dateien und vom /target-Switch gefunden werden. Wenn die Schnittstelle beispielsweise Features verwendet, die nur unter Windows 2000 oder höher unterstützt werden, generiert MIDL einen Schutz mit dem TARGET_IS_NT50_OR_LATER Makro.

Die in Rpcndr.h definierten Schutzmakros hängen von der Einstellung von WINVER und _WIN32_WINNT ab und werden vom C/C++-Compiler ausgewertet.

Wenn zur C-Kompilierungszeit eine Fehlermeldung angezeigt wird, die angibt, dass Sie eine bestimmte Plattform zum Ausführen eines Stubs benötigen, überprüfen Sie zunächst, ob Sie kein Feature verwendet haben, das auf dieser Plattform nicht verfügbar ist. Die Features, die einen bestimmten Schutz auslösen, werden im Text des Schutzes aufgeführt. Im vorherigen Beispiel löste der -Oicf-Compiler-Switch den Schutz aus. Wichtige Features dieser Art sind der /robust-Switch und das [async]-Attribut, das unter Windows 2000 und höher verfügbar ist, der pipe-Typkonstruktor, die /Oif-Compileroption und die Attribute [user_marshal] und [wire_marshal]. Stubs, die diese Features verwenden, werden nicht auf früheren Systemen ausgeführt.

Wenn Sie wissen, dass Ihre Zielplattform für die von Ihnen verwendeten Features korrekt ist und dennoch einen Fehler erhält, müssen Sie die Umgebungsvariablen möglicherweise entsprechend festlegen.

So erstellen Sie für Windows 2000 oder höhere Versionen

  • Fügen Sie diese Zeile zu Ihrer Makefile hinzu:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/robust

async

async_uuid

/Oi

pipe

wire_marshal

user_marshal

Marshallen von OLE-Datentypen