Compartilhar via


Erro do compilador C3642

'return_type/args': não é possível chamar uma função com a convenção de chamada __clrcall a partir de código nativo

Observações

Uma função marcada com a convenção de chamada __clrcall não pode ser chamada a partir do código nativo (não gerenciado).

return_type/args é o nome da função ou o tipo da função __clrcall que você está tentando chamar. Um tipo é usado quando você está chamando por meio de um ponteiro de função.

Para chamar uma função gerenciada a partir de um contexto nativo, você pode adicionar uma função "wrapper" que chamará a função __clrcall. Ou você pode usar o mecanismo de marshalling do CLR; consulte Como fazer marshal de ponteiros de função usando o PInvoke para mais informações.

Example

O exemplo a seguir gera 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
}