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
}