Compartir a través de


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
}