编译器错误 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
}