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
}