This documentation is archived and is not being maintained.

Compiler Error C2217

Error Message

'attribute1' requires 'attribute2'

The first function attribute requires the second attribute.

To fix by checking the following possible causes

  1. Interrupt (__interrupt) function declared as near. Interrupt functions must be far.

  2. Interrupt function declared with __stdcall, or __fastcall. Interrupt functions must use C calling conventions.


C2217 can also occur if you attempt to bind a delegate to a CLR function that takes a variable number of arguments. If the function also has e param array overload, use that instead. The following sample generates C2217.

// C2217.cpp
// compile with: /clr
using namespace System;
delegate void MyDel(String^, Object^, Object^, ...);   // C2217
delegate void MyDel2(String ^, array<Object ^> ^);   // OK

int main() {
   MyDel2^ wl = gcnew MyDel2(Console::WriteLine);
   array<Object ^ > ^ x = gcnew array<Object ^>(2);
   x[0] = safe_cast<Object^>(0);
   x[1] = safe_cast<Object^>(1);

   // wl("{0}, {1}", 0, 1);
   wl("{0}, {1}", x);