मेरे पास एक प्रोजेक्ट है जिसमें टेम्पलेट्स का भारी उपयोग करने वाले कुछ प्रदर्शन संवेदनशील देशी सी ++ शीर्षलेख शामिल हैं। इस प्रोजेक्ट के लिए हम हेडर को भी लपेटते हैं और सी # और अन्य .NET भाषाओं में कार्यक्षमता का पर्दाफाश करने के लिए कुछ गोंद कोड जोड़ते हैं। हम इस हेडर को "layout.h" कहते हैं, और हम मान लेंगे कि यह एक तृतीय पक्ष शीर्षलेख है जिसे मैं नहीं बदल सकता।क्या यह पता लगाने का कोई तरीका है कि #pragma अप्रबंधित C++/CLI में प्रभावी है या नहीं?
मिश्रित मोड में सी ++/सीएलआई असेंबली में गलती करना अपेक्षाकृत आसान है और #pragma अप्रबंधित (#pramga प्रबंधित (पुश, ऑफ)) कोड में किसी स्थान से शामिल है। जब ऐसा होता है तो टेम्पलेट आईएल उत्पन्न करते हैं, और मुझे कोड चलाने और निष्पादन के दौरान अतिरिक्त प्रबंधित/अप्रबंधित संक्रमण मिलते हैं।
मेरा सवाल यह है कि क्या मैं एक तरीका है जिसमें मैं # शामिल होने से ठीक पहले संकलन-समय की जांच कर सकता हूं ताकि संकलन विफल हो जाए यदि मैं गलत संदर्भ से # गलती से हूं।
// File1.cpp, compiled in a mixed mode C++/CLI assembly with /clr
ASSERT_UNMANAGED()
#include <layout.h>
मेरे अनुभवहीन 1 प्रयास _MANAGED #ifdef जाँच की है, लेकिन वह हमेशा परिभाषित किया गया है कि क्या मैं कोड या नहीं की #pragma अप्रबंधित ब्लॉक में हूँ।
+1: दिलचस्प सवाल। – leppie
यह वास्तव में एक कठिन है। मैं 'ASSERT_MANAGED' को लागू करने के लिए एक दर्जन विभिन्न तरीकों के बारे में सोच सकता हूं, लेकिन' ASSERT_UNMANAGED' ने मुझे स्टंप कर दिया है। – ildjarn
बस किसी को देखने के लिए, _MANAGED, __CLR_VER, और __cplusplus_cli #pragma प्रबंधित/#pragma ummanaged द्वारा अप्रभावित हैं, वहां स्कॉप्स पूरी संकलन इकाई हैं। –