Ne peut pas obtenir par “DllMain déjà défini” erreur
Je suis en train d'écrire une .la bibliothèque dll pour .injection de dll fins. Et de ce fait, il doit avoir une routine appelée DllMain, puisque c'est ce qui sera utilisé comme point d'entrée. Je pense que mon problème peut être lié au fait que je suis un lien dans une bibliothèque statique que j'ai écrit qui utilise des threads et des mutexs de afxmt.h. Parce que quelque part en bas de la ligne, à l'inclusion de ce est à l'origine de l'éditeur de liens pour le lien de mfcs100ud.lib qui contient apparemment sa propre version de la fonction DllMain.
Voici le fichier qui me donne de l'ennui:
dllmain.cpp
#include "stdafx.h"
#include <stdio.h>
#include "NamedPipeLogger.h"
static CNamedPipeLogger m_PipeLogger("Log.txt");
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
}
Ici est la stdafx.h fichier dllmain.cpp est compris.
stdafx.h
#pragma once
#define _AFXDLL
#include <Afx.h>
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN //Exclude rarely-used stuff from Windows headers
Voici mon message d'Erreur:
32 d'erreur error LNK2005: _DllMain@12 sont déjà définies dans la
dllmain.obj D:\xxxxx\xxxxx\xxxxxx\mfcs100ud.lib(dllmodul.obj)
Suis-je tout simplement vissé ici parce que je ne peux pas changer le nom de ma Dll point d'entrée pour quelque chose d'autre que DllMain?
dllmodul(e)
en venir? Il est très probable que votre bibliothèque statique contient un DllMain et la est le problème, plutôt que de MFC. Cette erreur particulière près de qui se passe quand vous faites une sorte de projet et de le modifier ultérieurement, ou de glissement de certains paramètres ou de code dans le cas contraire; il ne se contente pas d'apparaître dans de nouveaux projets et est facile à corriger une fois que vous trouver la source.Je ne suis pas sûr de ce que tu veux dire par dllmodul(e), mais le NamedPipeLogger.h fichier a son code provenant d'une lib statique que j'ai écrit. C'est une tige de fichier journal de l'écrivain qui se connecte à un canal nommé. Il utilise les mutex et les threads, j'ai donc d'inclure <afxmt.h>, <afxwin.h> et <afxmt.h>. Comment puis-je vérifier pour voir si ma bibliothèque statique contient un DllMain? J'ai écrit ce truc donc je sais que je n'ai pas déclarer ou même faire référence à un DllMain, donc je ne vois pas comment il pourrait être à venir à partir de cette lib.
Est votre bibliothèque statique de liaison pour MFC? Si oui quel est le réglage pour "Utilisation des MFC" dans les propriétés de configuration?
Assurez-vous qu'il n'existe pas de fonction de même nom, vérifiez les paramètres de l'éditeur de liens pour s'assurer qu'il n'est pas automatiquement l'ajout d'un (si un projet est/a été construit comme un DLL, l'entrée sera ajoutée en tant que par défaut, si non trouvé), assurez-vous de bien nettoyer et reconstruire la bibliothèque, sans DllMain (et de vérifier les autres bibliothèques que vous êtes, y compris), puis de reconstruire votre application. Chaque fois que j'ai vu c'était un vieux paramètre dans une bibliothèque, et toujours l'un des miens (ou au moins, de ne jamais le système de bibliothèques).
Je vois. Oui, la statique de la bibliothèque a été créée à l'origine d'une dll. Il semble être le seul moyen pour que le projet démarre. La première chose que j'ai fait mais il a changer pour une bibliothèque statique. Savez-vous où ce paramètre est je suis à la recherche pour. Je suis à l'aide de Visual Studio 2010. Je ne vois rien qui ressemble à "point d'entrée" configurations.
OriginalL'auteur Ultratrunks | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
Dans de nombreux cas, cela est causé par la présence d'_USRDLL dans le préprocesseur paramètres, où il devrait être _LIB. Cela a à faire avec des "dll d'extension MFC" je ne pense pas que quelqu'un fait encore aujourd'hui, mais le VS assistant semble supposer que vous ne voulez pas utiliser cette fonction lorsque vous cochez la case 'Utiliser les MFC" dans l'assistant.
OriginalL'auteur Roel
Récemment, j'ai vécu la même chose ou un problème similaire, et a trouvé une solution.
Fond
J'ai un projet MFC dans Visual Studio 2013 Pro, ce qui génère une DLL. J'en ai plusieurs .des modules en c dans le projet, je suis capable de faire par conditionnellement spécifiant le " extern "C"' construire, désactiver les en-têtes précompilés pour les fichiers, et - dans mon cas - désactivation hérité forcé comprend, qui a été en tirant dans stdafx.h à partir du projet par défaut.
Problème
Un jour, après avoir utilisé cette méthode avec succès sur plusieurs fichiers, quand je l'avais essayer d'en rajouter un de plus, j'aimerais obtenir l'erreur ci-dessous.
Solution
J'ai résolu ce problème par la mise en œuvre de la "Solution" de l' Article Base de Connaissances Microsoft Q148652, "UN LNK2005 erreur se produit lors de la bibliothèque CRT et les bibliothèques MFC sont liées dans le mauvais ordre dans Visual C++". Cela oblige l'éditeur de liens pour lier les bibliothèques dans l'ordre correct.
Suit:
Basé sur le Projet de Code de l'article Résoudre error LNK2005: _DllMain@12 déjà défini dans msvcrtd.lib(dllmain.obj) dans des Projets MFC", je me dis que je devrais peut-être ajouter une autre bibliothèque à cette liste un jour, mais ce bien fonctionne pour moi pour l'instant.
OriginalL'auteur cp.engr
Bien, je crois que j'ai jeté l'éponge sur cette une (sorte de). J'ai été en mesure d'obtenir au moins par tous mes problèmes. J'ai juste eu à cesser d'utiliser une partie de Microsoft classes.
J'ai touché sur ce sujet dans la description du problème, mais je me souviens de commencer à avoir de la difficulté avec la compilation dès que j'ai commencé à y compris:
J'ai compris ce que j'ai été exactement l'utilisation que ces comprend. J'ai été en utilisant le AfxBeginThread() méthode, et les classes CMutex et CCriticalSection. Alors j'ai pensé que peut-être que si je pouvais tout simplement obtenir loin de tout des propriétaires windows des choses que peut-être que mes problèmes vont disparaître. Que signifie la suppression de toutes les comprend , et puis d'examiner les erreurs de compilation avec plus de code c++ standard. Voici ce que j'ai fait:
Après cela, j'ai été en mesure de compiler les .dll et il a bien fonctionné.
CreateThread
etCRITICAL_SECTION
sont "plus standard" que ce que vous utilisez. Rien de ce que vous faites est standard; il est spécifique à Windows de A à Z. (Il n'y a rien mal avec cela, mais vous devez être conscient de cela.)Eh bien, il ne nécessite pas de Cadre d'Application de l'extension d'en-tête (afx), qui m'a été donné de la difficulté avec la mystérieuse dll lors de la liaison. C'est ce que je recevais.
OriginalL'auteur Ultratrunks
J'ai eu le message d'erreur quand j'ai déménagé
#include afxdllx.h
de dllmain.cpp pour StdAfx.h. Mon projet fonctionne sans cette comprennent égalementOriginalL'auteur user7428175