Bagikan melalui


Mengonsumsi Fungsi DLL Tidak Terkelola

Platform invoke adalah layanan yang memungkinkan kode terkelola untuk memanggil fungsi tidak terkelola yang diimplementasikan dalam pustaka tautan dinamis (DLL), seperti yang ada di Windows API. Ini menemukan dan memanggil fungsi yang diekspor dan mengatur argumennya (bilangan bulat, string, array, struktur, dan sebagainya) melintasi batas interoperabilitas sesuai kebutuhan.

Bagian ini memperkenalkan tugas yang terkait dengan penggunaan fungsi DLL yang tidak dikelola dan menyediakan informasi selengkapnya tentang pemanggilan platform. Selain tugas-tugas berikut, ada pertimbangan umum dan tautan yang memberikan informasi dan contoh tambahan.

Untuk menggunakan fungsi DLL yang diekspor

  1. Identifikasi fungsi di DLL.

    Minimal, Anda harus menentukan nama fungsi dan nama DLL yang berisinya.

  2. Buat kelas untuk menyimpan fungsi DLL.

    Anda dapat menggunakan kelas yang ada, membuat kelas individual untuk setiap fungsi yang tidak dikelola, atau membuat satu kelas yang berisi sekumpulan fungsi tidak terkelola terkait.

  3. Buat prototipe dalam kode terkelola.

    [Visual Basic] Gunakan pernyataan Declare dengan kata kunci Function dan Lib. Dalam beberapa kasus yang jarang terjadi, Anda dapat menggunakan DllImportAttribute dengan kata kunci Fungsi Bersama . Kasus-kasus ini dijelaskan nanti di bagian ini.

    [C#] DllImportAttribute Gunakan untuk mengidentifikasi DLL dan fungsi. Tandai metode dengan pengubah static dan extern .

    [C++] DllImportAttribute Gunakan untuk mengidentifikasi DLL dan fungsi. Tandai metode atau fungsi pembungkus dengan ekstern "C".

  4. Panggil fungsi DLL.

    Panggil metode di kelas terkelola Anda seperti yang Anda lakukan pada metode terkelola lainnya. Melewati struktur dan menerapkan fungsi panggilan balik adalah kasus khusus.

Misalnya yang menunjukkan cara membuat deklarasi berbasis .NET untuk digunakan dengan Platform Invoke, lihat Marshalling Data dengan Platform Invoke.

Melihat lebih dekat pemanggilan platform

Platform invoke mengandalkan metadata untuk menemukan fungsi yang diekspor dan mengelola argumennya selama waktu eksekusi. Ilustrasi berikut menunjukkan proses ini.

Diagram yang memperlihatkan panggilan invoke platform.

Ketika platform memanggil fungsi yang tidak dikelola, platform melakukan urutan tindakan berikut:

  1. Menemukan DLL yang berisi fungsi .

  2. Memuat DLL ke dalam memori.

  3. Menemukan alamat fungsi dalam memori dan menempatkan argumennya ke dalam tumpukan, mengemas data sesuai kebutuhan.

    Nota

    Menemukan dan memuat DLL, dan menemukan alamat fungsi dalam memori hanya terjadi pada panggilan pertama ke fungsi.

  4. Mentransfer kontrol ke fungsi yang tidak dikelola.

Pemanggilan platform melemparkan pengecualian yang dihasilkan oleh fungsi yang tidak dikelola ke pemanggil terkelola.

Lihat juga