Condividi tramite


Errore del compilatore C3642

'return_type/args': impossibile chiamare una funzione con __clrcall convenzione di chiamata dal codice nativo

Una funzione contrassegnata con la convenzione di chiamata __clrcall non può essere chiamata dal codice nativo (non gestito).

return_type/args è il nome della funzione o il tipo della __clrcall funzione che si sta tentando di chiamare. Un tipo viene usato quando si chiama tramite un puntatore a funzione.

Per chiamare una funzione gestita da un contesto nativo, è possibile aggiungere una funzione "wrapper" che chiamerà la __clrcall funzione. In alternativa, è possibile usare il meccanismo di marshalling CLR; per altre informazioni, vedere Procedura: Effettuare il marshalling dei puntatori a funzioni tramite PInvoke .

L'esempio seguente genera l'errore C3642:

// 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
}