De basis van interop (P/Invoke) in vogelvlucht
Roep native functies aan met P/Invoke: de basis van DllImport, strings marshalen, SetLastError en eenvoudige Win32-demo’s (Sleep, GetTickCount64).
De basis van interop (P/Invoke) in vogelvlucht is een gratis C# Academy-les op CoddyKit. Dit is les 2 van 3. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 3 lessen.
Concept en doelen
P/Invoke laat C# functies uit systeemeigen DLL's aanroepen.
- Gebruik DllImport om een methode te koppelen
- Kies indien nodig CharSet en SetLastError
- Houd handtekeningen eenvoudig en nauwkeurig
P/Invoke: Sleep
Koppel de systeemeigen functie door een beheerde methode met DllImport te declareren.
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!");
}
}
Systeemeigen retourwaarden
Stem de systeemeigen handtekening af: hier retourneren we een waarde zonder teken van 64 bits.
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);
}
}
Tekenreeksen en CharSet
Gebruik CharSet.Unicode voor API's met brede tekenreeksen (de versies met “W”). Vang runtimefouten op niet-ondersteunde platforms af.
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 en typen
Foutafhandeling:
- Voeg voor API's die GetLastError instellen SetLastError=true toe in DllImport
- Lees na een mislukte aanroep Marshal.GetLastWin32Error()
- Geef de voorkeur aan exacte typen: uint versus int, pointers als IntPtr
Goede gewoonten voor interop
- Begin met eenvoudige API's (zonder complexe structuren)
- Gebruik IntPtr voor handles; geef ze vrij met de juiste systeemeigen functie
- Vermijd GUI-aanroepen in omgevingen zonder scherm
- Documenteer platformbeperkingen (alleen Windows enzovoort)
Doel van DllImport
Samenvatting
Samenvatting: declareer systeemeigen aanroepen met DllImport, stem typen zorgvuldig af, kies CharSet voor tekenreeksen en handel fouten af via SetLastError en GetLastError wanneer dat van toepassing is.
Leer C# met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 93
- Lessen
- 346
Veelgestelde vragen
Is de les “De basis van interop (P/Invoke) in vogelvlucht” gratis?
Ja — de volledige tekst van “De basis van interop (P/Invoke) in vogelvlucht” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 3 lessen.
Wat leer ik in “De basis van interop (P/Invoke) in vogelvlucht”?
Roep native functies aan met P/Invoke: de basis van DllImport, strings marshalen, SetLastError en eenvoudige Win32-demo’s (Sleep, GetTickCount64). Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C# Academy te beginnen?
Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 3.
Hoe lang duurt de les “De basis van interop (P/Invoke) in vogelvlucht”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C# Academy?
Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- C#-scripting (dotnet script), snippets en REPL
- De basis van interop (P/Invoke) in vogelvlucht
- CLI-gebruiksvriendelijkheid