Dasar interoperabilitas (P/Invoke) sekilas
Panggil fungsi native dengan P/Invoke: dasar-dasar DllImport, marshaling string, SetLastError, dan demo Win32 sederhana (Sleep, GetTickCount64).
Dasar interoperabilitas (P/Invoke) sekilas adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.
Konsep & tujuan
P/Invoke memungkinkan C# memanggil fungsi dari DLL native.
- Gunakan DllImport untuk mengikat metode
- Pilih CharSet dan SetLastError bila diperlukan
- Jaga agar tanda tangan tetap sederhana dan akurat
P/Invoke: Sleep
Ikat fungsi native dengan mendeklarasikan metode terkelola menggunakan DllImport.
using System;
using System.Runtime.InteropServices;
// Simple P/Invoke call to native Sleep (Windows kernel32)
// Note: This demo may only run on Windows, but it compiles everywhere.
public class Program
{
[DllImport("kernel32.dll")]
private static extern void Sleep(uint dwMilliseconds);
public static void Main(string[] args)
{
Console.WriteLine("Sleeping for 200 ms...");
// Call native function
Sleep(200);
Console.WriteLine("Awake!");
}
}
Nilai yang dikembalikan native
Sesuaikan tanda tangan native: di sini kita mengembalikan nilai 64-bit tanpa tanda.
using System;
using System.Runtime.InteropServices;
// Get system uptime (ms) from native function.
public class Program
{
[DllImport("kernel32.dll")]
private static extern ulong GetTickCount64();
public static void Main(string[] args)
{
ulong ms = GetTickCount64();
Console.WriteLine("Uptime (ms): " + ms);
}
}
String & CharSet
Gunakan CharSet.Unicode untuk API string lebar (versi “W”). Tangkap kesalahan runtime pada platform yang tidak didukung.
using System;
using System.Runtime.InteropServices;
// Demo: marshaling strings to Unicode with CharSet.Unicode.
// On non-Windows environments this may fail at runtime.
public class Program
{
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
public static void Main(string[] args)
{
Console.WriteLine("Calling MessageBox (may require Windows GUI)...");
// 0x00000040 = MB_ICONINFORMATION
try
{
int result = MessageBox(IntPtr.Zero, "Hello from P/Invoke", "Interop", 0x00000040);
Console.WriteLine("MessageBox returned: " + result);
}
catch (Exception ex)
{
Console.WriteLine("MessageBox failed at runtime: " + ex.GetType().Name);
}
}
}
SetLastError & jenis
Penanganan kesalahan:
- Untuk API yang menetapkan GetLastError, tambahkan SetLastError=true dalam DllImport
- Setelah pemanggilan gagal, baca Marshal.GetLastWin32Error()
- Utamakan jenis yang tepat: uint dibandingkan int, pointer sebagai IntPtr
Kebersihan interoperabilitas
- Mulai dengan API sederhana (tanpa struktur kompleks)
- Gunakan IntPtr untuk handle; lepaskan dengan fungsi native yang tepat
- Hindari pemanggilan GUI di lingkungan tanpa antarmuka
- Dokumentasikan batasan platform (khusus Windows, dan sebagainya)
Tujuan DllImport
Rangkuman
Rangkuman: Deklarasikan pemanggilan native dengan DllImport, sesuaikan jenis dengan hati-hati, pilih CharSet untuk string, dan tangani kesalahan melalui SetLastError serta GetLastError jika berlaku.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar interoperabilitas (P/Invoke) sekilas” gratis?
Ya — teks lengkap “Dasar interoperabilitas (P/Invoke) sekilas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Dasar interoperabilitas (P/Invoke) sekilas”?
Panggil fungsi native dengan P/Invoke: dasar-dasar DllImport, marshaling string, SetLastError, dan demo Win32 sederhana (Sleep, GetTickCount64). Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.
Berapa lama pelajaran “Dasar interoperabilitas (P/Invoke) sekilas” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Skrip C# (dotnet script), cuplikan & REPL
- Dasar interoperabilitas (P/Invoke) sekilas
- Ergonomi CLI