コンパイラ エラー C2217

'attribute1' には 'attribute2' が必要です

最初の関数属性には 2 番目の属性が必要です。

次のような原因をチェックして問題を解決するには

  1. 割り込み (__interrupt) 関数が near として宣言されています。 割り込み関数は far である必要があります。

  2. 割り込み関数が __stdcall または __fastcall で宣言されています。 割り込み関数では、C の呼び出し規則を使用する必要があります。

C2217 は、可変個の引数を受け取る CLR 関数にデリゲートをバインドしようとした場合にも発生する可能性があります。 関数に e パラメーター配列のオーバーロードもある場合は、それを代わりに使用します。 次の例では 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);
}