다음을 통해 공유


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