كيفية القيام بما يلي: ترحيل إلى clr:safe/
Visual C++ يمكنه إنشاء كائنات قابلة للتحقق باستخدام /clr:safe ، والذي يسبب أن ينشئ برنامج التحويل البرمجي أخطاء لكل بناء تعليمات برمجية غير قابل للتحقق.
ملاحظات
تنشئ المشكلات التالية أخطاء القابلية للتحقيق:
الأنواع الأصلية. حتى إذا لم يتم استخدامها ، سيمنع التصريح بالفئات الأصلية أو البنيات أو المؤشرات أو المصفوفات من التحويل البرمجي.
المتغيرات العامة.
إستدعاءات الدالات إلى أي مكتبة غير مدارة بما في ذلك إستدعاءات دالات وقت تشغيل اللغة العامة
لا يمكن لدالة قابلة للتحقق أن تحتوي على static_cast Operator بالنسبة لـ down-casting. يمكن إستخدام static_cast Operator لتغيير النوع بين الأنواع الأولية ، ولكن لتغيير النوع لأسفل (down-casting)، يجب إستخدام safe_cast أو تحويل نمط C (الذي يتم تطبيقه كـ safe_cast).
لا يمكن للدالة القابلة للتحقق أن تحتوي على reinterpret_cast Operator (أو أي تحويل نمط C مكافئ).
لا يمكن لدالة قابلة للتحقق تنفيذ عملية حساببة على interior_ptr. فقط يمكنها التعيين لها وإلغاء الرجوع لها.
يمكن لدالة قابلة للتحقق فقط إلقاء (throw) أو إلتقاط (catch) مؤشرات إلى أنواع المراجع لذا يجب أن يتم تحويل أنواع القيم إلى كائنات قبل الإلقاء.
يمكن فقط لدالة قابلة للتحقق استدعاء دوال قابلة للتحقق (بحيث لا يتم السماح بإستدعاءات وقت تشغيل اللغة العامة، بما في ذلك AtEntry / AtExit ، و بالتالي المُنشئات العمومية غير مسموح بها).
لا يمكن لفئة قابلة للتحقق استخدام Explicit.
في حالة بناء EXE ، لا يمكن لدالة رئيسية التصريح بأية معلمات ، لذلك يجب إستخدام GetCommandLineArgs لاسترداد وسيطات سطر الأوامر.
إجراء إستدعاء غير ظاهري لدالة ظاهرية. فعلى سبيل المثال:
// not_verifiable.cpp // compile with: /clr ref struct A { virtual void Test() {} }; ref struct B : A {}; int main() { B^ b1 = gcnew B; b1->A::Test(); // Non-virtual call to virtual function }
أيضاً، لا يمكن استخدام الكلمات الأساسية التالية في تعليمات برمجية قابلة للتحقق:
pragmas unmanaged و pack
معدّلات naked و align__declspec
__try و __except