Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Windows asztali alkalmazásoknak (WinUI 3, WPF, WinForms, konzol) néha api-kat kell meghívniuk a felügyelt keretrendszeren kívül. Ez az oldal segít megérteni, hogy mikor történik, és válassza ki a megfelelő technikát.
Két API-felület, két interop minta
Windows két fő API-felületen teszi elérhetővé a funkciókat:
Win32 API-k – A rendszer DLL-ekből (
user32.dll, stbkernel32.dllshell32.dll.) exportált klasszikus C-stílusú függvények. Ezek az alacsony szintű műveleteket, például az ablakkezelést, a fájl I/O-t, a folyamatvezérlést és a hardverhozzáférést fedik le. Ezek a Windows legkorábbi verziói óta léteznek, és továbbra is számos olyan operációsrendszer-funkció elérésének módja marad, amelyek nem rendelkeznek felügyelt egyenértékű szolgáltatásokkal.Windows-futtatókörnyezet (WinRT) API-k – A Windows 8 bevezetett modern, objektumorientált API-felület (a névterek az elsővel
Windows.*kezdődnek). A WinRT API-k olyan területeket fednek le, mint az értesítések, a médiarögzítés, a Bluetooth, a földrajzi helymeghatározás stb. A legtöbb WinRT API közvetlenül elérhető a .NET-ből különösebb erőfeszítés nélkül, de egyesek használata asztali alkalmazásokban korlátozott, vagy a működéshez ablakazonosítót (HWND) igényelnek.
Amikor interop-ra fog ütközni
Általában interop-ra van szükség, ha az alkalmazás-keretrendszer nem tesz közzé közvetlenül egy adott operációsrendszer-képességet. Gyakori forgatókönyvek a következők:
| Scenario | Melyik API-felület | Example |
|---|---|---|
| Címsor vagy ablak elhelyezésének testreszabása | Win32 |
SetWindowPos, DwmExtendFrameIntoClientArea |
| Egy ablak beállítása „mindig legfelül”-ként, vagy a Z-sorrend szabályozása | Win32 |
SetWindowPos és HWND_TOPMOST |
| Fájlválasztó vagy megosztási párbeszédpanel megjelenítése a WinUI 3-ból | WinRT (HWND-t igényel) |
FileOpenPicker és InitializeWithWindow |
| Rendszermemória vagy teljesítményszámlálók olvasása | Win32 |
GlobalMemoryStatusEx, QueryPerformanceCounter |
| Globális gyorsbillentyű regisztrálása | Win32 | RegisterHotKey |
| Bejelentési értesítés küldése (csomagolatlan alkalmazás) | WinRT (az App SDK-val) | AppNotificationManager |
Ezekben az esetekben normál C#-kódot ír, de egy interoperabilitási rétegen keresztül éri el a Windowst. Az alábbi témakörök végigvezetik az egyes megközelítéseken.
Útmutató döntésekhez
| Szükségem van... | Ajánlott megközelítés | Téma |
|---|---|---|
| Win32 API meghívása (user32, kernel32, shell32 stb.) a C-ből# | A CsWin32 forrásgenerátor használata – típusbiztos, kézzel írt aláírások nélkül | Win32 API-k meghívása a C# (CsWin32) szolgáltatásból |
| WinRT-objektum inicializálása ablakfogóponttal (jelölők, párbeszédpanelek, felhasználói felület megosztása) | Használja a .NET WinRT COM interoperabilitási osztályokat (InitializeWithWindow, WindowNative stb.) |
.NET-alkalmazásközi API-k meghívása |
| Ellenőrizze, hogy a WinRT API működik-e asztali (nem UWP) alkalmazásban | Tekintse meg a korlátozások és alternatívák listáját | Asztali alkalmazásokban nem támogatott WinRT API-k |
| Egy teljes WinUI 3-példa , amely testre szab egy ablakot Win32-hívások használatával | Kövesse a teljes útmutatót | Útmutató: WinUI 3 alkalmazás Win32 interop-tal |
Gyors folyamatábra
Az API WinRT-névtérben
Windows.*van?- Igen → Ellenőrizze, hogy az asztali alkalmazások nem támogatják-e a WinRT API-kat a korlátozásokért. Ha az API-nak ablakleíróra van szüksége, tekintse meg az interop API-k meghívását egy .NET-alkalmazásból.
- Nincs → Folytassa a 2. lépést.
Ez egy Win32/native API (egy Windows SDK-fejlécfájlban van definiálva)?
- Igen → A CsWin32 használata típusbiztos P/Invoke kötések létrehozásához.
- Nincs → Lehet, hogy COM-felület vagy külső natív kódtár. Az általános P/Invoke-útmutatásért lásd: a .NET és a natív kód közötti interoperabilitás.
Kapcsolódó témakörök
Windows developer