2009-09-03 4 views
2

Je souhaite utiliser le compilateur MSVC pour générer un fichier DLL.Créer une DLL (sans point d'entrée) à partir de la ligne de commande avec MSVC

Le problème est que la DLL n'a pas de point d'entrée principal. C'est censé être une DLL partagée utilisée comme plug-in par une application. Je peux le compiler en utilisant GCC ainsi:

gcc -c plugin.c gcc -o -shared plugin.dll plugin.o interface.def

Le fichier DEF est de se soustraire à mutiler nom dans une exportation de fonction du plug-in (c'est la façon dont l'application utilise le plugin, grâce à cette fonction).

Si j'essaie de le compiler en utilisant MSVC, l'éditeur de liens se plaint que le point d'entrée doit être défini.

Je voudrais poser une autre question, y a-t-il un outil dans la suite MS Visual Studio comme le "strip" de GCC pour réduire la taille de fichier de EXE?

+0

Vous devriez probablement demander à l'autre question ... une autre question. Les gens qui ont de l'expertise dans votre deuxième question pourraient ne pas être en mesure de voir cela enfoui dans celui-ci. –

+0

Je suis d'accord, merci pour le commentaire. – Shantia

Répondre

3

Alors que les DLL ne nécessitent pas de point d'entrée, le runtime Microsoft C nécessite un point d'entrée pour s'initialiser. Y at-il une raison de ne pas avoir un DllMain vide?

Lors de la construction d'une DLL qui utilise l'un des les bibliothèques d'exécution C, afin de assurer que le CRT est correctement initialisé, soit

  1. la fonction initialisation doit être nommé DllMain() et le point d'entrée doit être spécifiée avec l'option de liaison -entrée: _DllMainCRTStartup @ 12 - ou -

  2. le point d'entrée DLL doit explicitement CRT_INIT d'appel() sur le processus attacher et processus détacher

KB94248

+0

Merci, non il n'y avait pas de raison à cela, l'exemple de plugin n'a pas de point d'entrée principal c'est pourquoi je l'ai eu comme ça. Quoi qu'il en soit, j'ai trouvé que l'ajout de l'option/DLL à l'éditeur de liens vous permet de faire ce que je voulais, peut-être que vous pourriez l'ajouter à la réponse pour le rendre plus complet. Merci pour tout! – Shantia

Questions connexes