2009-06-26 14 views
3

J'ai un projet ATLCOM migré de VC6 vers VS2008. Ma question est, comment puis-je construire le ps dllon VS 2008?Création d'un proxy/stub dll dans VS 2008

Les nouveaux projets ATL dans VS2008 ont un projet PS distinct qui construit la DLL ps. Mais la migration de VC6 n'a pas créé ce projet. J'ai essayé d'invoquer nmake sur le fichier ps mk mais cela donne une erreur de redéfinition pour un type enum qui existe à la fois dans notre fichier source et dans un fichier d'en-tête Windows automatiquement inclus. Dans la solution, nous avons corrigé cela en définissant le préprocesseur WIN32_LEAN_AND_MEAN qui exclut les fichiers d'en-tête inutiles. Puis-je faire la même chose en utilisant nmake?

Existe-t-il un autre moyen de créer la DLL ps?

Répondre

2

Les suggestions d'Eran semblent logiques mais je n'ai pas pu trouver certains des articles dont il parlait. J'ai donc essayé une approche différente.

J'ai créé un projet ATL (Server) vide dans VS 2008. Cela crée automatiquement un projet ps avec le projet atl normal.

J'ai copié le fichier vcproj pour le projet ps dans mon dossier de projet et rebaptisés à myprojectname ps.vcproj.

Ensuite, j'ai ouvert ma solution et ajouté le projet nouvellement copié à elle. J'ai renommé le projet (dans VS 2008) en myprojectname ps et supprimé tous les fichiers qui y étaient déjà inclus.

Ensuite, je compris mon _i.c, _p.c, dlldata.c et le fichier def dans le projet. Dans les paramètres sous Linker> Entrée> Fichier de définition de module, j'ai ajouté mon nom de fichier def.

C'est tout! Travaillé comme un charme.

+0

nb. Lors de la création du projet de serveur ATL COM EXE, ne pas cocher "Autoriser la fusion du proxy/code de stub". Proxy + Stub coudl résident dans des DLL séparées, donc cette option semble avoir du sens. Cependant, il ne génère aucun projet de substitution de proxy. – peterchen

0

Il a été un moment que je l'ai fait, et même alors, je ne l'ai pas eu d'instructions jusqu'à date, mais regarder en arrière au projet maintenant, je vais essayer de reconstruire le processus:

  1. Créez un nouveau projet DLL vide pour le PS. Aucun MFC ou ATL n'est nécessaire.
  2. Ajoutez les fichiers suivants au projet: proj _h.h, proj _i.c, proj _p.c, proj def, dlldata.c
  3. Dans les paramètres du projet, ajouter les bibliothèques suivantes aux dépendances supplémentaires: rpcndr.lib, rpcns4.lib, rpcrt4.lib
  4. Dans les paramètres du projet, spécifiez le fichier def comme fichier de définition de module.
  5. Dans les paramètres du projet, définissez "Générer les proxys stubless" sur Oui.
  6. Dans les paramètres du projet, définissez le fichier TLB que celui généré par le projet de serveur

C'est ce que je pourrais obtenir de postmorteming un projet de la mine. J'ai peut-être sauté quelques étapes, et il pourrait y avoir une meilleure façon de le faire. OTOH, je n'ai eu aucun problème avec le PS généré, et vous pourriez être en mesure de combler les lacunes que vous allez. Si vous essayez et trouvez des erreurs, veuillez ajouter un commentaire pour référence future.

+0

Merci Eran. Pouvez-vous me dire où trouver Générer des proxies stubless dans les paramètres? – bobbyalex

+0

Autre chose, quel est le type de projet à créer? Il n'y a pas de projet de DLL vide. Le seul est un projet de DLL MFC. – bobbyalex

+0

La fonction "Générer les proxies stubless" se trouve dans les paramètres généraux de MIDL. Pour créer un projet DLL vide, commencez par choisir une application Win32 et, dans la page des paramètres de l'application, définissez le type en tant que DLL. Bonne chance! – eran