DllImportAttribute.CallingConvention Feld

Definition

Gibt die Aufrufkonvention eines Einstiegspunkts an.

public: System::Runtime::InteropServices::CallingConvention CallingConvention;
public System.Runtime.InteropServices.CallingConvention CallingConvention;
val mutable CallingConvention : System.Runtime.InteropServices.CallingConvention
Public CallingConvention As CallingConvention 

Feldwert

Beispiele

In einigen Fällen verwenden Visual Basic-Entwickler anstelle der DllImportAttributeDeclare -Anweisung, um eine DLL-Funktion in verwaltetem Code zu definieren. Das Festlegen des CallingConvention Felds ist einer dieser Fälle.

using namespace System;
using namespace System::Runtime::InteropServices;

private ref class NativeMethods
{
    // Managed class methods don'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]...)
public:
    [DllImport("msvcrt.dll", CharSet = CharSet::Ansi,
        CallingConvention = CallingConvention::Cdecl)]
    static int printf(String^ format, int i, double d);

    [DllImport("msvcrt.dll", CharSet = CharSet::Ansi,
        CallingConvention = CallingConvention::Cdecl)]
    static int printf(String^ format, int i, String^ s);
};

void main()
{
    NativeMethods::printf("\nPrint params: %i %f", 99, 99.99);
    NativeMethods::printf("\nPrint params: %i %s", 99, "abcd");
}
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.Ansi,
        CallingConvention = CallingConvention.Cdecl)]
    internal static extern int printf(string format, int i, double d);

    [DllImport("msvcrt.dll", CharSet = CharSet.Ansi,
        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");
    }
}
Imports System.Runtime.InteropServices

Friend Class NativeMethods
    ' Visual Basic 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.Ansi,
        CallingConvention:=CallingConvention.Cdecl)>
    Friend Shared Function printf(format As String, i As Integer, d As Double) As Integer
    End Function
    <DllImport("msvcrt.dll", CharSet:=CharSet.Ansi,
        CallingConvention:=CallingConvention.Cdecl)>
    Friend Shared Function printf(format As String, i As Integer, s As String) As Integer
    End Function
End Class

Public Class App
    Public Shared Sub Main()
        NativeMethods.printf(vbCrLf + "Print params: %i %f", 99, 99.99)
        NativeMethods.printf(vbCrLf + "Print params: %i %s", 99, "abcd")
    End Sub
End Class

Hinweise

Sie legen dieses Feld auf eines der CallingConvention Enumerationsmember fest. Der Standardwert für das CallingConvention Feld ist , was wiederum für Windows und Cdecl auf allen anderen Plattformen standardmäßig StdCall konventioniert istWinapi.

Gilt für:

Weitere Informationen