كيفية القيام بما يلي: ترحيل إلى 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
    }
    

أيضاً، لا يمكن استخدام الكلمات الأساسية التالية في تعليمات برمجية قابلة للتحقق:

راجع أيضًا:

المرجع

تعليمة برمجية خالصة و قابلة للتحقق