Udostępnij przez


Błąd kompilatora C3642

"return_type/args": nie można wywołać funkcji z __clrcall wywoływaniem konwencji z kodu natywnego

Uwagi

Funkcja oznaczona __clrcall konwencją wywoływania nie może być wywoływana z natywnego (niezarządzanego) kodu.

return_type/args jest nazwą funkcji lub typem __clrcall funkcji, którą próbujesz wywołać. Typ jest używany podczas wywoływania za pomocą wskaźnika funkcji.

Aby wywołać funkcję zarządzaną z kontekstu natywnego, można dodać funkcję "otoki", która będzie wywoływać __clrcall funkcję. Można też użyć mechanizmu marshalingu CLR; Zobacz Instrukcje: przeprowadzanie marshalingu wskaźników funkcji przy użyciu funkcji PInvoke , aby uzyskać więcej informacji.

Example

Poniższy przykład generuje 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
}