编译器错误 C3642
“return_type/args”: 不能从本机代码中调用包含 __clrcall 调用约定的函数
无法从本机(非托管)代码调用使用 __clrcall 调用约定标记的函数。
return_type/args 是该函数的名称,或是您正在尝试调用的 __clrcall
函数的类型。 通过函数指针调用时,将使用类型。
若要从本机上下文调用托管函数,可以添加将调用 __clrcall
函数的“wrapper”函数。 或者,可以使用 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
}