Bagikan melalui


Menentukan Titik Masuk

Titik masuk mengidentifikasi lokasi fungsi dalam DLL. Dalam proyek terkelola, nama asli atau titik masuk ordinal fungsi target mengidentifikasi fungsi tersebut di seluruh batas interoperabilitas. Selanjutnya, Anda dapat memetakan titik masuk ke nama yang berbeda, mengganti nama fungsi secara efektif.

Berikut ini adalah daftar kemungkinan alasan untuk mengganti nama fungsi DLL:

  • Untuk menghindari penggunaan nama fungsi API yang sensitif terhadap penulisan huruf besar/kecil

  • Untuk mematuhi standar penamaan yang ada

  • Untuk mengakomodasi fungsi yang mengambil jenis data yang berbeda (dengan mendeklarasikan beberapa versi fungsi DLL yang sama)

  • Untuk menyederhanakan penggunaan API yang berisi versi ANSI dan Unicode

Topik ini menunjukkan cara mengganti nama fungsi DLL dalam kode terkelola.

Mengganti nama Fungsi di Visual Basic

Visual Basic menggunakan Function kata kunci dalam Declare pernyataan untuk mengatur DllImportAttribute.EntryPoint bidang. Contoh berikut menunjukkan deklarasi dasar.

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

Anda dapat mengganti MessageBox titik entri dengan MsgBox dengan menyertakan kata kunci Alias dalam definisi Anda, seperti yang ditunjukkan dalam contoh berikut. Dalam kedua contoh, kata kunci Auto menghilangkan kebutuhan untuk menentukan versi set karakter dari titik masuk. Untuk informasi selengkapnya tentang memilih kumpulan karakter, lihat Menentukan Kumpulan Karakter.

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

Mengganti nama Fungsi di C# dan C++

Anda dapat menggunakan DllImportAttribute.EntryPoint bidang untuk menentukan fungsi DLL berdasarkan nama atau ordinal. Jika nama fungsi dalam definisi metode Anda sama dengan titik masuk di DLL, Anda tidak perlu mengidentifikasi fungsi dengan EntryPoint bidang secara eksplisit. Jika tidak, gunakan salah satu formulir atribut berikut untuk menunjukkan nama atau ordinal:

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

Perhatikan bahwa Anda harus mengawali ordinal dengan tanda pon (#).

Contoh berikut ini menunjukkan cara mengganti MessageBoxA dengan MsgBox dalam kode Anda menggunakan bidang EntryPoint.

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);

Lihat juga