2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
C#-ohjelmoinnissa[global::System.Runtime.InteropServices.DllImport]
on attribuutti, jota käytetään hallitsemattoman koodin (yleensä C- tai C++-kielellä kirjoitetun DLL:n tai kirjaston) aloituspisteen merkitsemiseen, jotta C#-koodi voi kutsua sitä. Tämä ominaisuus on osa P/Invoke (Platform Invocation Services) -mekanismia, jonka avulla C#-koodi voi olla vuorovaikutuksessa muiden ohjelmointikielien koodin kanssa.
Kun näet tämän ominaisuuden, sitä käytetään yleensä tuomaan funktio DLL-tiedostoon, jotta sitä voidaan kutsua C#-koodilla. Esimerkiksi:
- using System;
- using System.Runtime.InteropServices;
-
- class NativeMethods
- {
- // 导入DLL中的函数
- [DllImport("MyNativeLibrary.dll")]
- public static extern int MyNativeMethod(int a, int b);
- }
-
- class Program
- {
- static void Main()
- {
- // 调用DLL中的函数
- int result = NativeMethods.MyNativeMethod(1, 2);
- Console.WriteLine(result);
- }
- }
Tässä esimerkissäMyNativeMethod
on yksi sisäänMyNativeLibrary.dll
funktiossa määritetty funktio, joka tuodaan C#-koodiin, jotta se voi ollaMain
kutsutaan menetelmässä.
DllImport
Ominaisuuksilla on useita parametreja, mutta yleisin parametri on DLL:n nimi (kuten yllä olevassa esimerkissä). Muita parametreja voivat olla kutsukäytäntö (CallingConvention), CharSet (merkkijonoille käytetty merkkijoukko) jne.
Huomautus: Kun käytät P/Invokea DLL:n kanssa, sinun on varmistettava, että DLL on yhteensopiva sovelluksesi kanssa (eli ne käyttävät samaa ajonaikaista ympäristöä ja DLL on käännetty käyttöjärjestelmääsi ja arkkitehtuuriasi varten). Lisäksi, koska P/Invoke ohittaa C#:n tyyppisen turvajärjestelmän, on huolehdittava siitä, että siirretyt parametrit ja palautetut arvot vastaavat tarkasti DLL:n funktion allekirjoitusta.