링커 도구 오류 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();
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기