DllImportAttribute.CallingConvention Mező
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy belépési pont hívási konvencióját jelzi.
public: System::Runtime::InteropServices::CallingConvention CallingConvention;
public System.Runtime.InteropServices.CallingConvention CallingConvention;
val mutable CallingConvention : System.Runtime.InteropServices.CallingConvention
Public CallingConvention As CallingConvention
Mező értéke
Példák
Bizonyos esetekben Visual Basic fejlesztők a DllImportAttribute a Declare utasítás helyett egy DLL-függvényt definiálnak a felügyelt kódban.
CallingConvention A mező beállítása az ilyen esetek egyike.
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
Megjegyzések
Ezt a mezőt az CallingConvention enumerálási tagok egyikére állítja. A CallingConvention mező alapértelmezett értéke a Winapi, amely az alapértelmezett érték a Windows StdCall konvenciója, az Cdecl pedig az összes többi platformon.