Megosztás a következőn keresztül:


Linker Tools hiba LNK2031

nem lehet p/invoke-t létrehozni a "function_declaration" decorated_name esetében; a metaadatokban hiányzik a hívási konvenció

Megjegyzések

Amikor natív függvényt próbál meg egy tiszta képbe importálni, ne feledje, hogy az implicit hívási konvenciók különböznek a natív és a tiszta fordítások között. A tiszta képekről további információt a Tiszta és ellenőrizhető kód (C++/CLI) című témakörben talál.

A /clr:pure fordító beállítás elavult a Visual Studio 2015-ben, és nem támogatott a Visual Studio 2017-ben.

Példák

Ez a példakód egy exportált, natív függvényt tartalmazó összetevőt hoz létre, amelynek hívási konvencióját implicit módon __cdecl.

// LNK2031.cpp
// compile with: /LD
extern "C" {
   __declspec(dllexport) int func() { return 3; }
};

Az alábbi példa egy tiszta ügyfelet hoz létre, amely a natív függvényt használja. A /clr:pure hívó konvenciója azonban __clrcall. Az alábbi példa LNK2031 hoz létre.

// LNK2031_b.cpp
// compile with: /clr:pure LNK2031.lib
// LNK2031 expected
extern "C" int func();

int main() {
   return func();
}

Az alábbi példa bemutatja, hogyan lehet a natív függvényt tiszta képből felhasználni. Jegyezze meg az explicit __cdecl hívási konvenciót.

// LNK2031_c.cpp
// compile with: /clr:pure LNK2031.lib
extern "C" int __cdecl func();

int main() {
   return func();
}