Поделиться через


Ошибка компилятора C3642

"return_type/args": не удается вызвать функцию с соглашением о вызове __clrcall из машинного кода

Функция, помеченная __clrcall соглашение о вызовах, не может вызываться из собственного кода (неуправляемого).

return_type/args — это имя функции или тип вызываемой __clrcall функции. Тип используется при вызове указателя функции.

Чтобы вызвать управляемую функцию из собственного контекста, можно добавить функцию-оболочку, которая вызовет функцию __clrcall . Кроме того, можно использовать механизм маршаллинга СРЕДЫ CLR; Дополнительные сведения см. в статье "Практическое руководство. Маршал указателей функций с помощью PInvoke ".

Следующий пример приводит к возникновению ошибки 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
}