Condivisione della tecnologia

globale::System.Runtime.InteropServices.DllImport

2024-07-12

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

Nella programmazione C#,[global::System.Runtime.InteropServices.DllImport] È un attributo (Attributo) utilizzato per contrassegnare il punto di ingresso di un codice non gestito (in genere una DLL o una libreria scritta in C o C++) in modo che il codice C# possa chiamarlo. Questa funzionalità fa parte del meccanismo P/Invoke (Platform Invocation Services), che consente al codice C# di interagire con il codice in altri linguaggi di programmazione.

Quando vedi questa funzionalità, in genere viene utilizzata per importare una funzione in una DLL in modo che possa essere chiamata nel codice C#. Per esempio:

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

In questo esempio,MyNativeMethodè uno dentroMyNativeLibrary.dllfunzione definita in , che viene importata nel codice C# in modo che possa essereMainchiamato nel metodo.

DllImport Le proprietà hanno diversi parametri, ma il parametro più comune è il nome della DLL (come nell'esempio sopra). Altri parametri possono includere la convenzione di chiamata (CallingConvention), CharSet (set di caratteri utilizzato per le stringhe), ecc.

Nota: quando si utilizza P/Invoke con una DLL, è necessario assicurarsi che la DLL sia compatibile con l'applicazione (ovvero, utilizzino lo stesso ambiente di runtime e la DLL sia compilata per il sistema operativo e l'architettura). Inoltre, poiché P/Invoke ignora il sistema di sicurezza dei tipi di C#, è necessario prestare particolare attenzione per garantire che i parametri passati e i valori restituiti corrispondano esattamente alla firma della funzione nella DLL.