Teknologian jakaminen

global::System.Runtime.InteropServices.DllImport

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:

  1. using System;
  2. using System.Runtime.InteropServices;
  3. class NativeMethods
  4. {
  5. // 导入DLL中的函数
  6. [DllImport("MyNativeLibrary.dll")]
  7. public static extern int MyNativeMethod(int a, int b);
  8. }
  9. class Program
  10. {
  11. static void Main()
  12. {
  13. // 调用DLL中的函数
  14. int result = NativeMethods.MyNativeMethod(1, 2);
  15. Console.WriteLine(result);
  16. }
  17. }

Tässä esimerkissäMyNativeMethodon yksi sisäänMyNativeLibrary.dllfunktiossa määritetty funktio, joka tuodaan C#-koodiin, jotta se voi ollaMainkutsutaan 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.