컴파일러 오류 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
}