/clr Kısıtlama -ları

kullanımıyla /clrilgili aşağıdaki kısıtlamalara dikkat edin:

  • Yapılandırılmış bir özel durum işleyicisinde, ile /clrderlenirken kullanımıyla _alloca ilgili kısıtlamalar vardır. Daha fazla bilgi için bkz. _alloca.

  • çalışma zamanı hata denetimlerinin kullanımı ile /clrgeçerli değildir. Daha fazla bilgi için bkz . Nasıl yapılır: Yerel çalışma zamanı denetimlerini kullanma.

  • /clr Yalnızca standart C++ söz dizimi kullanan bir programı derlemek için kullanıldığında, satır içi derleme kullanımı için aşağıdaki yönergeler geçerlidir:

    • Yerel yığın düzeni, geçerli işlevin dışında kuralları çağırma veya yönetilen bir işlev için yığın çerçevesine bu bilgi uygulandığında bilgisayarla ilgili diğer alt düzey bilgileri çağıran satır içi derleme kodu başarısız olabilir. Satır içi derleme kodu içeren işlevler, olmadan /clrderlenmiş ayrı bir modüle yerleştirilmiş gibi yönetilmeyen işlevler olarak oluşturulur.

    • Kopyalanmış işlev parametrelerini geçiren işlevlerde satır içi derleme kodu desteklenmez.

  • vprintf İşlevler ile /clrderlenmiş bir programdan çağrılamıyor.

  • naked __declspec Değiştirici altında /clryoksayılır.

  • tarafından _set_se_translator ayarlanan translator işlevi yalnızca yönetilmeyen koddaki yakalamaları etkiler. Daha fazla bilgi için bkz . Özel durum işleme.

  • altında işlev işaretçilerinin karşılaştırılmasına /clrizin verilmez.

  • altında tam prototipi olmayan işlevlerin kullanılmasına /clrizin verilmez.

  • Aşağıdaki derleyici seçenekleri ile /clrdesteklenmez:

  • Ön işlemci tanımı (/D_STATIC_CPPLIB) ile derleyici seçeneğinin /clr birleşimi _STATIC_CPPLIB desteklenmez. Bunun nedeni, tanımın uygulamanızın desteklenmeyen statik, çok iş parçacıklı C++ Standart Kitaplığı ile bağlantı oluşturmasına neden olmasıdır. Daha fazla bilgi için bkz /MD. , /MT, /LD (Çalışma Zamanı Kitaplığını Kullanma).

  • ile /clrkullandığınızda/Zi, performans etkileri vardır. Daha fazla bilgi için bkz. /Zi.

  • Bir .NET Framework çıkış yordamına, karakteri belirtmeden /Zc:wchar_t veya atamadan geniş bir karakter _wchar_t geçirmek, çıkışın olarak unsigned short intgörünmesine neden olur. Örneğin:

    Console::WriteLine(L' ')              // Will output 32.
    Console::WriteLine((__wchar_t)L' ')   // Will output a space.
    
  • /GS ile derlenirken /clr, bir işlev altında #pragma unmanaged olmadığı veya işlevin yerel kod olarak derlenmesi gerekmediği sürece yoksayılır; bu durumda derleyici varsayılan olarak kapalı olan C4793 uyarısını oluşturur.

  • Yönetilen uygulamanın işlev imzası gereksinimleri için bkz /ENTRY .

  • ve /clr ile /openmp derlenen uygulamalar yalnızca tek bir uygulama etki alanı işleminde çalıştırılabilir. Daha fazla bilgi için bkz /openmp . (OpenMP 2.0 Desteğini Etkinleştirme).

  • Değişken sayıda bağımsız değişken (varargs) kullanan işlevler yerel işlevler olarak oluşturulur. Değişken bağımsız değişken konumundaki tüm yönetilen veri türleri yerel türlere sıralanır. Herhangi bir System.String tür aslında geniş karakter dizeleridir, ancak tek baytlı karakter dizeleri için sıralanır. Bu nedenle, tanımlayıcı printf ()wchar_t* ise %S bunun yerine bir %s dizeye göre sıralanır.

  • Makroyu va_arg kullanırken, ile /clr:purederleme yaparken beklenmeyen sonuçlar alabilirsiniz. Daha fazla bilgi için bkz. va_arg, va_copy, va_end, va_start. /clr:pure ve /clr:safe derleyici seçenekleri Visual Studio 2015'te kullanım dışıdır ve Visual Studio 2017 ve sonraki sürümlerde desteklenmez. "Saf" veya "güvenli" olması gereken kod C# öğesine aktarılmalıdır.

  • Yönetilen koddan parametre bilgilerini (işlev bağımsız değişkenleri) almak için yığında gezinen işlevleri çağırmamalısınız. P/Invoke katmanı, bu bilgilerin yığının daha aşağısına inmelerine neden olur. Örneğin, ile /clrproxy/stub derlemeyin.

  • İşlevler mümkün olduğunda yönetilen koda derlenir, ancak tüm C++ yapıları yönetilen koda çevrilemez. Bu belirleme, işlev bazında yapılır. bir işlevin herhangi bir bölümü yönetilen koda dönüştürülemezse, işlevin tamamı yerel koda dönüştürülür. Aşağıdaki durumlar derleyicinin yönetilen kod oluşturmasını engeller.

    • Derleyici tarafından oluşturulan thunk'lar veya yardımcı işlevler. Sanal işlev çağrıları dahil olmak üzere bir işlev işaretçisi aracılığıyla herhangi bir işlev çağrısı için yerel thunk'lar oluşturulur.

    • veya longjmpçağıran setjmp işlevler.

    • Makine kaynaklarını doğrudan işlemek için belirli iç yordamları kullanan işlevler. Örneğin, ve __disableve _ReturnAddress ve _AddressOfReturnAddressveya multimedya iç kodlarının kullanımı __enable yerel kodla sonuçlanır.

    • yönergesini #pragma unmanaged izleyen işlevler. (Tersi de #pragma manageddesteklenir.)

    • Hizalanmış türlere, yani kullanılarak __declspec(align(...))bildirilen türlere başvurular içeren bir işlev.

Ayrıca bkz.