共用方式為


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