共用方式為


編譯器錯誤 C3642

'return_type/args': 無法從機器碼呼叫慣例__clrcall呼叫函式

無法從原生 (Unmanaged) 程式代碼呼叫具有 __clrcall 呼叫慣例標記的函式。

return_type/args 是函式的名稱或您嘗試呼叫的 __clrcall 函式類型。 當您透過函式指標呼叫 時,會使用類型。

若要從原生內容呼叫Managed函式,您可以新增將呼叫函式的 __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
}