2008-12-05 4 views
1

Je suis en train de convertir un projet MSVC de VS 2005 à VS 2008. Il contient un fichier IDL qui génère un en-tête et des stubs utilisés pour RPC. Le projet VS 2005 utilise MIDL.exe version 6.00.0366. Le projet VS 2008 utilise MIDL.exe version 7.00.0500.Sortie différente de midl.exe 6 et midl.exe 7

Voici le problème: MIDL v6 sort le prototype suivant pour moi de mettre en œuvre dans mon code serveur:

HRESULT PRC_Function(UINT input); 

MIDL v7 avec la même ligne de commande transmet ce prototype:

HRESULT RPC_Function(handle_t IDL_handle, UINT input); 

Je don Je ne veux pas avoir à passer par et ajouter le paramètre handle_t à toutes mes implémentations existantes. (De plus, j'ai encore besoin des implémentations pour compiler avec VS 2005 pendant un moment de plus.)

Question: Comment puis-je obtenir MIDL.exe v7 pour sortir les mêmes prototypes de serveur RPC que v6?

Répondre

1

On dirait que je peux répondre à ma propre question ...

MIDL v6 apparaît par défaut automatiquement le type de poignée auto_handle pour les prototypes de serveur. MIDL v7 ne fonctionne pas, donc la solution est d'utiliser un fichier Server.acl avec le paramètre auto_handle. Cela génère un fichier Server.h avec des prototypes de fonctions identiques entre MIDL v6 et v7.

Cependant, il émet également un avertissement indiquant que "auto_handle" a été déprécié. Au lieu de cela, j'ai utilisé implicit_handle (handle_t IDL_handle).

Dommage que ce site ne me donne pas de badges pour répondre à mes propres questions. Je ne peux pas non plus signaler ma propre réponse comme étant la bonne réponse.

+0

Peu de gens manipulent RPC. Je l'ai découvert ici. – lsalamon

+0

Charles - Je suis l'un des rares qui utilise RPC, et j'ai un problème qui ressemble à la vôtre, et je me demandais si vous pouviez poster un peu plus de perspicacité à votre problème. Mon problème est que MIDL v7 essaie de créer des routines Rundown dans une deuxième interface sur le même service. MIDL v5 ne fait pas ça ... – LarryF

0

Le handle_t IDL_handle est pour le descripteur de liaison RPC explicite. Du côté du serveur, vous pouvez faire des trucs sympas comme tirer le jeton du client appelant pour l'usurpation d'identité à travers les différentes fonctions RPC, mais si vous n'avez pas besoin de l'utiliser, il suffit de le définir comme un paramètre non référencé (UNREFERENCED_PARAMETER (IDL_handle);). Il semble que les poignées de liaison implicites soient désormais obsolètes.

Du côté client, vous utilisez la poignée de liaison que vous obtenez lorsque vous vous connectez au serveur RPC pour le paramètre IDL_handle.

Questions connexes