Erreur du compilateur C3642

'return_type/args' : impossible d’appeler une fonction avec __clrcall convention d’appel à partir du code natif

Une fonction marquée avec la convention d’appel __clrcall ne peut pas être appelée à partir du code natif (non managé).

return_type/args est le nom de la fonction ou le type de la __clrcall fonction que vous essayez d’appeler. Un type est utilisé lorsque vous appelez via un pointeur de fonction.

Pour appeler une fonction managée à partir d’un contexte natif, vous pouvez ajouter une fonction « wrapper » qui appellera la __clrcall fonction. Vous pouvez également utiliser le mécanisme de marshaling CLR ; consultez Guide pratique pour marshaler des pointeurs de fonction à l’aide de PInvoke pour plus d’informations.

L’exemple suivant génère l’erreur 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
}