編譯器錯誤 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
}