Bağlayıcı Araçları Hatası LNK2031

"function_declaration" decorated_name için p/invoke oluşturulamıyor; meta verilerde çağrı kuralı eksik

Açıklamalar

Yerel bir işlevi saf görüntüye aktarmaya çalışırken, örtük çağrı kurallarının yerel ve saf derlemeler arasında farklılık gösterdiğini unutmayın. Saf görüntüler hakkında daha fazla bilgi için bkz . Saf ve Doğrulanabilir Kod (C++/CLI).

/clr:pure derleyici seçeneği Visual Studio 2015'te kullanım dışıdır ve Visual Studio 2017'de desteklenmez.

Örnekler

Bu kod örneği, çağırma kuralı örtük olarak __cdecl dışarı aktarılan, yerel bir işleve sahip bir bileşen oluşturur.

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

Aşağıdaki örnek, yerel işlevi kullanan saf bir istemci oluşturur. Ancak, /clr:pure altındaki çağırma kuralı __clrcall. Aşağıdaki örnek LNK2031 oluşturur.

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

int main() {
   return func();
}

Aşağıdaki örnekte yerel işlevin saf bir görüntüden nasıl tükettiği gösterilmektedir. Açık __cdecl çağrı kuralı tanımlayıcısını not edin.

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

int main() {
   return func();
}