次の方法で共有


コンパイラ エラー C3642

'return_type/args': __clrcall 呼び出し規約を伴う関数を、ネイティブ コードから呼び出すことはできません

__clrcall 呼び出し規則でマークされた関数は、ネイティブ (アンマネージド) コードから呼び出すことができません。

return_type/args は、関数の名前または呼び出そうとしている __clrcall 関数の型のいずれかです。 型は、関数ポインターを使用して呼び出しているときに使用されます。

ネイティブ コンテキストからマネージド関数を呼び出すには、__clrcall 関数を呼び出す "ラッパー" 関数を追加します。 または、CLR マーシャリング メカニズムを使用できます。詳細については、「方法: PInvoke を使用して関数ポインターをマーシャリングする」を参照してください。

次の例では C3642 が生成されます。

// C3642.cpp
// compile with: /clr
using namespace System;
struct S {
   void Test(String ^ s) {   // CLR type in signature, implicitly __clrcall
      Console::WriteLine(s);
   }
   void Test2(char * s) {
      Test(gcnew String(s));
   }
};

#pragma unmanaged
int main() {
   S s;
   s.Test("abc");   // C3642
   s.Test2("abc");   // OK
}