Teilen über


Compilerfehler C3642

'return_type/args': Eine Funktion kann nicht mit __clrcall Aufrufkonvention aus systemeigenem Code aufgerufen werden.

Bemerkungen

Eine Funktion, die mit der __clrcall Aufrufkonvention gekennzeichnet ist, kann nicht aus systemeigenem (nicht verwaltetem) Code aufgerufen werden.

return_type/args ist entweder der Name der Funktion oder der Typ der __clrcall Funktion, die Sie aufrufen möchten. Ein Typ wird verwendet, wenn Sie einen Funktionszeiger aufrufen.

Um eine verwaltete Funktion aus einem systemeigenen Kontext aufzurufen, können Sie eine "Wrapper"-Funktion hinzufügen, die die __clrcall Funktion aufruft. Oder Sie können den CLR-Marshallmechanismus verwenden; weitere Informationen finden Sie unter How to: Marshal Function Pointers Using PInvoke .

Example

Im folgenden Beispiel wird C3642 generiert:

// C3642.cpp
// compile with: /clr
using namespace System;
struct S {
   void Test(String ^ s) {   // CLR type in signature, implicitly __clrcall
      Console::WriteLine(s);
   }
   void Test2(char * s) {
      Test(gcnew String(s));
   }
};

#pragma unmanaged
int main() {
   S s;
   s.Test("abc");   // C3642
   s.Test2("abc");   // OK
}