Error del compilador C3642
"return_type/args": no se puede llamar a una función con la convención de llamada __clrcall desde código nativo
No se puede llamar desde código nativo (no administrado) a una función marcada con la convención de llamada __clrcall.
return_type/args es el nombre de la función o el tipo de la función __clrcall
a la que intenta llamar. Se usa un tipo cuando se llama a través de un puntero de función.
Para llamar a una función administrada desde un contexto nativo, puede agregar una función "contenedora" que llamará a la función __clrcall
. También tiene la opción de usar el mecanismo de serialización CLR; consulte el procedimiento para serializar punteros de función mediante PInvoke para más información.
El ejemplo siguiente genera el error 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
}