다음을 통해 공유


링커 도구 오류 LNK2031

"function_declaration" decorated_name 대한 p/invoke를 생성할 수 없습니다. 메타데이터에 누락된 호출 규칙

설명

네이티브 함수를 순수 이미지로 가져오려고 할 때 암시적 호출 규칙은 네이티브 컴파일과 순수 컴파일 간에 다릅니다. 순수 이미지 에 대한 자세한 내용은 순수 및 확인 가능한 코드(C++/CLI)를 참조하세요.

/clr:pure 컴파일러 옵션은 Visual Studio 2015에서 더 이상 사용되지 않으며 Visual Studio 2017에서는 지원되지 않습니다.

예제

이 코드 샘플은 호출 규칙이 암시적으로 __cdecl 내보낸 네이티브 함수를 사용하여 구성 요소를 생성합니다.

// LNK2031.cpp
// compile with: /LD
extern "C" {
   __declspec(dllexport) int func() { return 3; }
};

다음 샘플에서는 네이티브 함수를 사용하는 순수 클라이언트를 만듭니다. 그러나 /clr:pure호출 규칙은 __clrcall. 다음 샘플에서는 LNK2031 생성합니다.

// LNK2031_b.cpp
// compile with: /clr:pure LNK2031.lib
// LNK2031 expected
extern "C" int func();

int main() {
   return func();
}

다음 샘플에서는 순수 이미지에서 네이티브 함수를 사용하는 방법을 보여줍니다. 명시적 __cdecl 호출 규칙 지정자를 확인합니다.

// LNK2031_c.cpp
// compile with: /clr:pure LNK2031.lib
extern "C" int __cdecl func();

int main() {
   return func();
}