2011-10-08 1 views
4

Existe-t-il une macro que je peux utiliser pour vérifier le type de configuration actuel dans Visual Studio? En fonction du réglage actuel, j'aimerais soit inclure une fonction principale ou DLLMain:Visual Studio: Macro pour vérifier le type de configuration (exe/dll)

#IFDEF CONFIGURATION_TYPE_EXE 

    int main(int argc, char **argv) 
    { 
     ... 
    } 
#ELSEIF CONFIGURATION_TYPE_DLL 


    BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) 
    { 
     return TRUE; 
    } 

#ENDIF 
+0

Vous pouvez définir vos propres configurations de construction et définitions de préprocesseur dans Visual Studio pour le faire pour vous. – helloworld922

+0

Pouvez-vous définir le 'type de configuration actuel', voulez-vous dire les modes de construction Release/Debug? – simbolo

+0

@simbolo no, theres une option appelée "type de configuration" dans Configuration Properties -> General, que je voudrais vérifier pour la configuration actuelle (debug/release). – Pedro

Répondre

6

Si c'est un projet de DLL, le _USRDLL sera défini. (voir Propriétés de configuration \ Préprocesseur \ Définitions du préprocesseur). Attention cependant, car la liste est remplie par l'assistant et ne se mettra pas à jour automatiquement si le projet a été créé comme autre chose et ensuite configuré en tant que DLL. En outre, vous devez faire attention si vous construisez une lib pour être liée avec une DLL.

+0

Je viens d'essayer ifdef _USRDLL sur le projet que j'ai créé à l'origine en tant qu'application. Quand je passe au type de configuration dll, il n'est toujours pas défini. Il y a donc d'autres paramètres de projet que je devrais changer, je suppose. – Pedro

+1

J'ai explicitement parlé de ce scénario .. – ruslik

7

Si c'est dll alors _WINDLL sera défini comme valeur héritée. Vous pouvez le trouver ici: Propriétés de configuration -> C/C++ -> Préprocesseur -> Définitions du préprocesseur.

#ifdef _WINDLL 
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 
{ ... } 
#else 
int main(int argc, char** argv) 
{ ... } 
#endif 
+0

Ceci est plus fiable que '_USRDLL' comme mentionné, il est hérité par une feuille de propriétés incluse automatiquement. –

Questions connexes