連結器工具錯誤 LNK2031
無法為 「function_declaration」 產生 p/invoke decorated_name;呼叫元數據中遺漏的慣例
備註
嘗試將原生函式匯入純映射時,請記住,原生和純編譯之間的隱含呼叫慣例不同。 如需純映像的詳細資訊,請參閱純和可驗證的程式代碼(C++/CLI)。
Visual Studio 2015 中已淘汰 /clr:pure 編譯程序選項,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();
}