Aracılığıyla paylaş


Nasıl yapılır: /clr:safe için geçiş (C++/ CLI)

Visual C++ /clr:safe kullanarak doğrulanabilir bileşenler oluşturabilir ve bu derleyicinin her bir doğrulanamaz kod yapısı için hata üretmesine neden olur.

Notlar

Aşağıdaki sorunlar doğrulayabilirlik hataları oluşturur:

  • Yerel türler. Kullanılmasa dahi, yerel sınıfların, yapıların, işaretçilerin veya dizilerin açıklanması derlemeyi engelleyecektir.

  • Genel değişkenler

  • İşlev, ortak dil çalışma zamanı fonksiyon çağrıları dahil, yönetilmeyen herhangi bir kütüphaneyi çağırır

  • Doğrulanabilir bir işlev, aşağı dönüştürme için static_cast operatörü bağlantısı içeremez. static_cast operatörü öğesi basit türler arasında atama için kullanılabilir ancak aşağı dönüştürme, safe_cast (C++ Bileşen Uzantıları) öğesi veya bir C-Türü atamada (bir safe_cast (C++ Bileşen Uzantıları) olarak gerçekleştirilen) kullanılmalıdır.

  • Doğrulanabilir bir işlev, reinterpret_cast operatörü bağlantısı (veya herhangi bir C tarzı dönüştürme eşdeğeri) içeremez.

  • Doğrulanabilir bir işlev, interior_ptr (C++/CLI) bağlantısı üzerinde aritmetik gerçekleştiremiyor. Sadece ona atayabilir ve başvurabilir.

  • Doğrulanabilir bir işlev yalnızca başvuru türlerine işaretçi atabilir veya yakalayabilir, dolayısıyla değer türleri atmadan önce kutulanmalıdır.

  • Doğrulanabilir bir işlev yalnızca doğrulanabilir işlevleri çağırabilir (öyle ki AtEntry/AtExit dahil ortak dil çalışma çağrılarına izin verilmez ve dolayısıyla genel oluşturuculara da izin verilmez).

  • Doğrulanabilir bir sınıf, Explicit başvurusunu kullanamaz.

  • Bir EXE oluşturuluyorsa, ana işlev herhangi bir parametre bildirimi yapamaz, bu nedenle GetCommandLineArgs komut satırı bağımsız değişkenlerini almak için kullanılmalıdır.

  • Sanal olmayan bir aramayı sanal işleve dönüştürme. Örne?in:

    // 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
    }
    

Ayrıca, aşağıdaki anahtar kelimeler doğrulanabilir kod içinde kullanılamaz:

Ayrıca bkz.

Başvuru

Saf ve doğrulanabilir kod (C++/ CLI)