链接器工具错误 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();
}