Ошибка компилятора 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
}