共用方式為


連結器工具錯誤 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();
}