영어로 읽기

다음을 통해 공유


CallingConvention 열거형

정의

비관리 코드에서 구현된 메서드를 호출하는 데 필요한 호출 규칙을 지정합니다.

public enum CallingConvention
[System.Serializable]
public enum CallingConvention
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum CallingConvention
상속
CallingConvention
특성

필드

Name Description
Cdecl 2

호출자가 스택을 정리합니다. varargs를 사용하여 함수를 호출할 수 있으므로 Printf와 같은 가변 개수의 매개 변수를 허용하는 메서드에 사용하기에 적합합니다.

FastCall 5

이 호출 규칙이 지원되지 않습니다.

StdCall 3

호출 수신자가 스택을 정리합니다.

ThisCall 4

첫 번째 매개 변수는 this 포인터이며 레지스터 ECX에 저장됩니다. 다른 매개 변수는 스택에 푸시됩니다. 이 호출 규칙은 관리되지 않는 DLL에서 내보낸 클래스의 메서드를 호출하는 데 사용됩니다.

Winapi 1

이 멤버는 실제로 호출 규칙이 아니라 기본 플랫폼 호출 규칙을 사용합니다.

예제

다음 예제에서는 호출자가 스택을 Cdecl 정리하므로 사용해야 하는 호출 규칙을 적용하는 방법을 보여 줍니다.

using System;
using System.Runtime.InteropServices;

internal static class NativeMethods
{
    // C# doesn't support varargs so all arguments must be explicitly defined.
    // CallingConvention.Cdecl must be used since the stack is
    // cleaned up by the caller.

    // int printf( const char *format [, argument]... )

    [DllImport("msvcrt.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    internal static extern int printf(String format, int i, double d);

    [DllImport("msvcrt.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
    internal static extern int printf(String format, int i, String s);
}

public class App
{
    public static void Main()
    {
        NativeMethods.printf("\nPrint params: %i %f", 99, 99.99);
        NativeMethods.printf("\nPrint params: %i %s", 99, "abcd");
    }
}

설명

항상 열거형이 아닌 열거형을 CALLCONV 사용하여 CallingConvention 관리 코드에서 호출 규칙을 지정합니다. 후자는 COM 정의를 위해서만 존재합니다. CallingConvention 열거형은 및 의 여러 클래스에서 System.Reflection.Emit 플랫폼 호출 서명을 동적으로 내보내는 데 사용됩니다DllImportAttribute.

적용 대상

제품 버전
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

추가 정보