Bagikan melalui


Menentukan Titik Entri

Titik entri mengidentifikasi lokasi fungsi dalam DLL. Dalam proyek terkelola, nama asli atau titik entri nomor urut fungsi target mengidentifikasi fungsi tersebut di seluruh batas interoperasi. Selanjutnya, Anda dapat memetakan titik entri ke nama yang berbeda, dengan mengganti nama fungsi secara efektif.

Berikut daftar kemungkinan alasan untuk mengganti nama fungsi DLL:

  • Untuk menghindari penggunaan nama fungsi API yang peka huruf besar/kecil

  • Untuk mematuhi standar penamaan yang ada

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

  • Untuk memudahkan penggunaan API yang berisi versi ANSI dan Unicode

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

Mengganti nama Fungsi dalam Visual Basic

Visual Basic menggunakan kata kunci Fungsi dalam pernyataan Deklarasikan untuk menetapkan bidang DllImportAttribute.EntryPoint. 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 titik entri MessageBox dengan MsgBox dengan menyertakan kata kunci Alias dalam definisi Anda, seperti yang diperlihatkan dalam contoh berikut. Dalam kedua contoh, kata kunci Otomatis menghilangkan kebutuhan untuk menentukan versi tataan karakter dari titik entri. Untuk informasi selengkapnya tentang memilih kumpulan karakter, lihat Menentukan Tataan 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 bidang DllImportAttribute.EntryPoint untuk menentukan fungsi DLL menurut nama atau nomor urut. Jika nama fungsi dalam definisi metode Anda sama dengan titik entri di DLL, Anda tidak perlu mengidentifikasi fungsi secara eksplisit dengan bidang EntryPoint. Jika tidak, gunakan salah satu formulir atribut berikut untuk menunjukkan nama atau nomor urut:

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

Perhatikan bahwa Anda harus mengawali nomor urut dengan tanda pagar (#).

Contoh berikut menunjukkan cara mengganti MessageBoxA dengan MsgBox dalam kode Anda dengan 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