Κοινή χρήση τεχνολογίας

global::System.Runtime.InteropServices.DllImport

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Στον προγραμματισμό C#,[global::System.Runtime.InteropServices.DllImport] Είναι ένα χαρακτηριστικό (Χαρακτηριστικό) που χρησιμοποιείται για την επισήμανση του σημείου εισόδου ενός μη διαχειριζόμενου κώδικα (συνήθως ενός DLL ή μιας βιβλιοθήκης γραμμένης σε C ή C++), ώστε να μπορεί να τον καλέσει ο κώδικας C#. Αυτή η δυνατότητα αποτελεί μέρος του μηχανισμού P/Invoke (Platform Invocation Services), ο οποίος επιτρέπει στον κώδικα C# να αλληλεπιδρά με τον κώδικα σε άλλες γλώσσες προγραμματισμού.

Όταν βλέπετε αυτήν τη δυνατότητα, συνήθως χρησιμοποιείται για την εισαγωγή μιας συνάρτησης σε ένα DLL, ώστε να μπορεί να κληθεί σε κώδικα C#. Για παράδειγμα:

  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. }

Σε αυτό το παράδειγμα,MyNativeMethodείναι ένα σεMyNativeLibrary.dllσυνάρτηση που ορίζεται στο , η οποία εισάγεται στον κώδικα C# ώστε να μπορεί να είναιMainκαλείται στη μέθοδο.

DllImport Οι ιδιότητες έχουν πολλές παραμέτρους, αλλά η πιο κοινή παράμετρος είναι το όνομα του DLL (όπως στο παραπάνω παράδειγμα). Άλλες παράμετροι μπορεί να περιλαμβάνουν τη σύμβαση κλήσης (CallingConvention), το CharSet (σύνολο χαρακτήρων που χρησιμοποιείται για συμβολοσειρές) κ.λπ.

Σημείωση: Όταν χρησιμοποιείτε το P/Invoke με ένα DLL, πρέπει να βεβαιωθείτε ότι το DLL είναι συμβατό με την εφαρμογή σας (δηλαδή, χρησιμοποιούν το ίδιο περιβάλλον χρόνου εκτέλεσης και το DLL έχει μεταγλωττιστεί για το λειτουργικό σύστημα και την αρχιτεκτονική σας). Επιπλέον, επειδή το P/Invoke παρακάμπτει το σύστημα ασφαλείας τύπου C#, πρέπει να ληφθεί ιδιαίτερη προσοχή για να διασφαλιστεί ότι οι παράμετροι που έχουν περάσει και οι επιστρεφόμενες τιμές ταιριάζουν ακριβώς με την υπογραφή συνάρτησης στο DLL.