Layanan Panggilan Platform

Layanan Panggilan Platform, yang lebih dikenal sebagai P/Invoke, adalah fitur dari implementasi Common Language Infrastructure, seperti Common Language Runtime dari Microsoft, yang memungkinkan kode terkelola untuk memanggil kode asli. Kode terkelola, seperti C# atau VB.NET, menyediakan akses asli terhadap kelas, metode, dan jenis yang didefinisikan di dalam pustaka yang menyusun .NET Framework. Walaupun .NET Framework menyediakan rangkaian kegunaan yang luas, mungkin ada kekurangan akses ke banyak pustaka sistem operasi tingkat rendah yang biasanya ditulis dalam kode tidak terkelola atau pustaka pihak ketiga yang juga ditulis dalam kode tidak terkelola. P/Invoke adalah teknik yang dapat digunakan oleh programmer untuk mengakses fungsi-fungsi di pustaka tersebut. Panggilan ke fungsi-fungsi di dalam pustaka tersebut terjadi dengan cara mendeklarasikan tanda tangan fungsi tidak terkelola tersebut di dalam kode terkelola, yang menjadi fungsi sesungguhnya yang dapat dipanggil seperti halnya metode terkelola yang lain. Deklarasi tersebut merujuk ke jalur file dan mendefinisikan parameter dan pengembalian fungsi dalam jenis terkelola yang kemungkinan besar disusun secara implisit ke dan dari jenis tidak terkelola oleh runtime bahasa umum (CLR). Ketika jenis data tidak terkelola menjadi terlalu rumit untuk konversi sederhana yang implisit dari dan ke jenis terkelola, kerangka tersebut memungkinkan pengguna untuk mendefinisikan atribut di fungsi, pengembalian, dan/atau parameter untuk dengan eksplisit memperbaiki cara data disusun sehingga tidak mengarah ke kondisi abnormal yang dapat terjadi ketika ingin melakukannya secara implisit. Ada banyak abstraksi dari konsep pemrograman tingkat rendah yang tersedia bagi programmer kode terkelola, dibandingkan dengan pemrograman dalam bahasa tidak terkelola. Sebagai hasilnya, programmer yang hanya berpengalaman dengan kode terkelola akan harus memoles konsep pemrograman seperti pointer, struktur, dan passing by reference untuk melampaui rintangan dalam menggunakan P/Invoke.