'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
}