Kompilatorfel C3642

"return_type/args" : kan inte anropa en funktion med __clrcall anropskonvention från innativ kod

Anmärkningar

En funktion som är markerad med __clrcall anropande konvention kan inte anropas från intern (ohanterad) kod.

return_type/args är antingen namnet på funktionen eller den typ av __clrcall funktion som du försöker anropa. En typ används när du anropar via en funktionspekare.

Om du vill anropa en hanterad funktion från en intern kontext kan du lägga till en "wrapper"-funktion som anropar __clrcall funktionen. Eller så kan du använda CLR-marshallingmekanismen; mer information finns i How to: Marshal Function Pointers Using PInvoke (Marskalkera funktionspekare med PInvoke).

Example

I följande exempel genereras 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
}