Ошибка компилятора C3821Compiler Error C3821

"функция": управляемый тип или функция не могут использоваться в неуправляемой функции'function': managed type or function cannot be used in an unmanaged function

Функции со встроенной сборкой или setjmp не могут содержать типы значений или управляемые классы.Functions with inline assembly or setjmp cannot contain value types or managed classes. Чтобы устранить эту ошибку, удалите встроенную сборку и setjmp или удалите управляемые объекты.To fix this error, remove the inline assembly and setjmp or remove the managed objects.

C3821 также может возникать при попытке использовать автоматическое хранилище в функции vararg.C3821 can also occur if you try to use automatic storage in a vararg function. Дополнительные сведения см. в разделе списки аргументов переменных (...) (c++/CLI) и Семантика стека c++ для ссылочных типов.For more information, see Variable Argument Lists (...) (C++/CLI) and C++ Stack Semantics for Reference Types.

ПримерыExamples

Следующий пример приводит к возникновению ошибки C3821.The following sample generates C3821.

// C3821a.cpp
// compile with: /clr /c
public ref struct R {};
void test1(...) {
   R r;   // C3821
}

Следующий пример приводит к возникновению ошибки C3821.The following sample generates C3821.

// C3821b.cpp
// compile with: /clr
// processor: /x86
ref class A {
   public:
   int i;
};

int main() {
   // cannot use managed classes in this function
   A ^a;

   __asm {
      nop
   }
} // C3821