Zielstubs für bestimmte 32-Bit- oder 64-Bit-Plattformen

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

Als Vorsichtsmaßnahme generieren die MIDL 3.0- und höher-Compiler Schutzmaßnahmen, die die Kompatibilitätsüberprüfung während der C-Kompilierungsphase erleichtern. MIDL generiert zwei Arten von Wächtern: einen plattformabhängigen Wächter (32-Bit im Vergleich zu 64-Bit) und einen releaseabhängigen Schutz (Featuresatzabhä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 in den verarbeiteten IDL-Dateien und durch den Schalter /target ausgelöst. Wenn die Schnittstelle beispielsweise Features verwendet, die nur unter Windows 2000 oder höher unterstützt werden, generiert MIDL einen Wächter mit dem Makro TARGET _ IS _ NT50 _ ODER _ LATER.

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 Sie zur C-Kompilierungszeit eine Fehlermeldung erhalten, 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 Wächter auslösen, werden im Text des Wächters aufgeführt. Im vorherigen Beispiel hat der Compilerschalter -Oicf den Schutz ausgelöst. Zu den wichtigsten Features dieser Art gehören der Schalter /robust und das asynchrone Attribut, das unter [ ] Windows 2000 und höher verfügbar ist, der Pipetypkonstruktor, die Compileroption /Oif und die Marshall- und [ _ ] [ Wire _ Marshal-Attribute des ] Benutzers. Stubs, die diese Features verwenden, werden auf früheren Systemen nicht ausgeführt.

Wenn Sie wissen, dass Ihre Zielplattform für die von Ihnen verwendeten Features korrekt ist und trotzdem ein Fehler auftritt, müssen Sie die Umgebungsvariablen möglicherweise entsprechend festlegen.

So erstellen Sie für Windows 2000 oder höher

  • Fügen Sie Ihrer Makefile-Datei diese Zeile hinzu:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/robust

Asynchrone

Async _ uuid

/Oi

Rohr

Wire _ Marshal

_Benutzer-Marshalling

Marshallen von OLE-Datentypen