Share via


Giriş Noktası Belirtme

Bir giriş noktası, bir işlevin bir DLL içindeki konumunu tanımlar. Yönetilen bir proje içinde, bir hedef işlevin özgün adı veya sıra giriş noktası, birlikte çalışabilirlik sınırında bu işlevi tanımlar. Ayrıca, işlemi etkin şekilde yeniden adlandırarak giriş noktasını farklı bir adla eşleyebilirsiniz.

Aşağıda, DLL işlevini yeniden adlandırmanın olası nedenlerinin listesi yer alıyor:

  • Büyük/küçük harf duyarlı API işlev adlarını kullanmaktan kaçınmak için

  • Varolan adlandırma standartlarına uymak için

  • Farklı veri türleri alan işlevleri barındırmak için (aynı DLL işlevinin birden çok sürümünü bildirerek)

  • ANSI ve Unicode sürümlerini içeren API'leri kullanmayı kolaylaştırmak için

Bu konu, bir DLL işlevinin yönetilen kod içinde nasıl yeniden adlandıracağını gösterir.

Visual Basic'te bir İşlevi Yeniden Adlandırma

Visual Basic, alanı ayarlamak için Declare deyimindeki function anahtar sözcüğünü DllImportAttribute.EntryPoint kullanır. Aşağıdaki örnek, temel bir bildirimi gösterir.

Friend Class NativeMethods
    Friend Declare Auto Function MessageBox Lib "user32.dll" (
        ByVal hWnd As IntPtr,
        ByVal lpText As String,
        ByVal lpCaption As String,
        ByVal uType As UInteger) As Integer
End Class

Aşağıdaki örnekte gösterildiği gibi, Tanımınıza Alias anahtar sözcüğünü ekleyerek MessageBox giriş noktasını MsgBox ile değiştirebilirsiniz. Her iki örnekte de Otomatik anahtar sözcüğü, giriş noktasının karakter kümesi sürümünü belirtme gereksinimini ortadan kaldırır. Karakter kümesi seçme hakkında daha fazla bilgi için bkz . Karakter Kümesi Belirtme.

Friend Class NativeMethods
    Friend Declare Auto Function MsgBox _
        Lib "user32.dll" Alias "MessageBox" (
        ByVal hWnd As IntPtr,
        ByVal lpText As String,
        ByVal lpCaption As String,
        ByVal uType As UInteger) As Integer
End Class

C# ve C++'de bir İşlevi Yeniden Adlandırma

Bir DLL işlevini ada veya sıraya göre belirtmek için DllImportAttribute.EntryPoint alanını kullanabilirsiniz. Yöntem tanımınızdaki işlevin adı DLL'deki giriş noktasıyla aynıysa, işlevi EntryPoint alanıyla açıkça tanımlamanız gerekmez. Aksi halde, bir ad veya sıra belirtmek için aşağıdaki öznitelik biçimlerinden birini kullanın:

[DllImport("DllName", EntryPoint = "Functionname")]
[DllImport("DllName", EntryPoint = "#123")]

Bir sıralı sayıyı (#) işareti ile kullanmanız gerektiğini unutmayın.

Aşağıdaki örnek, EntryPoint alanını kullanarak kodunuzda MessageBoxA ile MsgBox'ın nasıl değiştirilmeyi gösterir.

using System;
using System.Runtime.InteropServices;

internal static class NativeMethods
{
    [DllImport("user32.dll", EntryPoint = "MessageBoxA")]
    internal static extern int MsgBox(
        IntPtr hWnd, string lpText, string lpCaption, uint uType);
}
using namespace System;
using namespace System::Runtime::InteropServices;

typedef void* HWND;
[DllImport("user32", EntryPoint = "MessageBoxA")]
extern "C" int MsgBox(
    HWND hWnd, String* lpText, String* lpCaption, unsigned int uType);

Ayrıca bkz.