Aracılığıyla paylaş


Giriş Noktası Belirtme

Giriş noktası, DLL'deki bir işlevin konumunu tanımlar. Yönetilen bir projede, hedef işlevin özgün adı veya sıralı giriş noktası, bu işlevi birlikte çalışma sınırı boyunca tanımlar. Ayrıca, giriş noktasını farklı bir adla eşleyerek işlevi etkili bir şekilde yeniden adlandırabilirsiniz.

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

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

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

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

  • ANSI ve Unicode sürümleri içeren API'lerin kullanımını basitleştirmek için

Bu konu başlığında yönetilen kodda DLL işlevinin nasıl yeniden adlandırılası gösterilmektedir.

Visual Basic'te İşlevi Yeniden Adlandırma

Visual Basic, Declare deyiminde Function anahtar sözcüğünü kullanarak DllImportAttribute.EntryPoint alanını ayarlar. Aşağıdaki örnekte temel bir bildirim gösterilmektedir.

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

Tanımınıza Alias anahtar sözcüğünü ekleyerek MessageBox giriş noktasını MsgBox olarak değiştirebilirsiniz, aşağıdaki örnekte gösterildiği gibi. Her iki örnekte Auto de anahtar sözcük, 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++ dilinde İşlevi Yeniden Adlandırma

Ad veya numara ile bir DLL işlevi 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 alanla EntryPoint açıkça tanımlamanız gerekmez. Aksi takdirde, bir ad veya sıra belirtmek için aşağıdaki öznitelik formlarından birini kullanın:

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

Bir sıra numarasının önüne pound işareti (#) eklemeniz gerektiğini unutmayın.

Aşağıdaki örnekte, EntryPoint alanını kullanarak kodunuzda MessageBoxA değerinin MsgBox ile nasıl değiştirileceği gösterilmektedir.

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 bakınız