{"id":747,"date":"2011-07-10T17:45:06","date_gmt":"2011-07-10T15:45:06","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=747"},"modified":"2011-07-12T18:54:15","modified_gmt":"2011-07-12T16:54:15","slug":"vs-tipps-und-tricksfeststellen-ob-atl-oder-mfc-in-einem-projekt-benutzt-werden","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2011\/07\/10\/vs-tipps-und-tricksfeststellen-ob-atl-oder-mfc-in-einem-projekt-benutzt-werden\/","title":{"rendered":"VS-Tipps und Tricks:Feststellen ob ATL oder MFC in einem Projekt benutzt werden"},"content":{"rendered":"<p>F\u00fcr manche\u00a0Standardklassen bzw. Header\u00a0oder Libraries ist es manchmal sch\u00f6n zu wissen ob die <em>ATL<\/em> oder die <em>MFC<\/em> in einem Projekt verwendet werden.\u00a0 In der Vergangenheit habe ich dies oft benutzt um bestimmte Member in Klassen einzubauen, die dann zum Beispiel Daten auch als <em>CString <\/em>aktzeptieren, oder diese Member dann eben nicht einzubauen um eine Nutzung in einem &#8222;puren&#8220; <em>WinAPI<\/em> Projekt zu erm\u00f6glichen.<br \/>\nSeit die <em>CString <\/em>Klassen allerdings eigenst\u00e4ndige\u00a0Templates wurden ist dieser Grund f\u00fcr mich eigentlich weggefallen.<br \/>\nIch benutzte es heute nur noch um evtl. Memberfunktionen zu unterscheiden die evtl. CWnd* zus\u00e4tzlich zu HWND Parametern akzeptieren.<\/p>\n<p>Aber wer wei\u00df, vielleicht hat der eine oder andere doch die Frage wie er erkennen kann ob die <em>ATL<\/em> oder die <em>MFC<\/em> in einem Projekt Verwendung finden.<\/p>\n<p>Vordefinierte Preprozessor Variablen gibt es daf\u00fcr nicht, allerdings kann man erkennen ob die Standard <em>ATL<\/em>\/<em>MFC<\/em>Header in einem Projekt bereits als Include eingef\u00fcgt wurden, denn in diesem Fall kann man die Existenz der Include-Guards pr\u00fcfen.<\/p>\n<p>Die <em>MFC<\/em> benutzt <strong><em>__AFX_H__ <\/em><\/strong>als Guard f\u00fcr die <em>afx.h<\/em>.<br \/>\nDie Basisklassen der <em>ATL<\/em> befinden sich in der <em>atlbase.h<\/em>und entsprechend lautet der Guard: <strong><em>__ATLBASE_H__<\/em><\/strong>.<\/p>\n<p>Sofern also diese Guards definiert sind wurden auch die entsprechenden Libraries in der <em>stdafx.h<\/em> oder anderen Headern zuvor included.<\/p>\n<p><strong>Nachtrag 12.07.2011:<br \/>\nStefan<\/strong> hat nat\u00fcrlich vollkommen recht mit seinem Kommentar, dass es die zwei Pr\u00e4prozessor-Variablen <strong><em>_MFC_VER <\/em><\/strong>und <strong><em>_ATL_VER <\/em><\/strong>gibt, die nat\u00fcrlich f\u00fcr den hier erw\u00e4hnten Einsatz weitaus besser geeigent sind.<br \/>\nSiehe: <a href=\"http:\/\/msdn.microsoft.com\/de-de\/library\/b0084kay.aspx\">http:\/\/msdn.microsoft.com\/de-de\/library\/b0084kay.aspx<\/a><br \/>\nIch habe hier den Wald vor lauter B\u00e4umen nicht gesehen \ud83d\ude09<br \/>\nHerzlichen Dank f\u00fcr diese produktive Erg\u00e4nzung.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr manche\u00a0Standardklassen bzw. Header\u00a0oder Libraries ist es manchmal sch\u00f6n zu wissen ob die ATL oder die MFC in einem Projekt verwendet werden.\u00a0 In der Vergangenheit habe ich dies oft benutzt um bestimmte Member in Klassen einzubauen, die dann zum Beispiel Daten auch als CString aktzeptieren, oder diese Member dann eben nicht einzubauen um eine Nutzung &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2011\/07\/10\/vs-tipps-und-tricksfeststellen-ob-atl-oder-mfc-in-einem-projekt-benutzt-werden\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eVS-Tipps und Tricks:Feststellen ob ATL oder MFC in einem Projekt benutzt werden\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[30,4,3,31],"tags":[366,370,352],"class_list":["post-747","post","type-post","status-publish","format-standard","hentry","category-c","category-mfc","category-programmieren","category-vs-tipps-tricks","tag-atl","tag-c","tag-mfc"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=747"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/747\/revisions"}],"predecessor-version":[{"id":874,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/747\/revisions\/874"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=747"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}