Technologieaustausch

global::System.Runtime.InteropServices.DllImport

2024-07-12

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

Bei der C#-Programmierung[global::System.Runtime.InteropServices.DllImport] ist ein Attribut, das verwendet wird, um den Einstiegspunkt eines nicht verwalteten Codes (normalerweise eine in C oder C++ geschriebene DLL oder Bibliothek) zu markieren, damit C#-Code ihn aufrufen kann. Diese Funktion ist Teil des P/Invoke-Mechanismus (Platform Invocation Services), der es C#-Code ermöglicht, mit Code in anderen Programmiersprachen zu interagieren.

Wenn Sie diese Funktion sehen, wird sie normalerweise zum Importieren einer Funktion in eine DLL verwendet, damit sie im C#-Code aufgerufen werden kann. Zum Beispiel:

  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 diesem Beispiel,MyNativeMethodist einer inMyNativeLibrary.dllFunktion, die in definiert ist und in den C#-Code importiert wird, damit dies möglich istMainin der Methode aufgerufen.

DllImport Eigenschaften verfügen über mehrere Parameter, der häufigste Parameter ist jedoch der Name der DLL (wie im obigen Beispiel). Andere Parameter können Aufrufkonvention (CallingConvention), CharSet (für Zeichenfolgen verwendeter Zeichensatz) usw. sein.

Hinweis: Wenn Sie P/Invoke mit einer DLL verwenden, müssen Sie sicherstellen, dass die DLL mit Ihrer Anwendung kompatibel ist (d. h. sie verwenden dieselbe Laufzeitumgebung und die DLL ist für Ihr Betriebssystem und Ihre Architektur kompiliert). Da P/Invoke außerdem das Typsicherheitssystem von C# umgeht, muss besonders darauf geachtet werden, dass die übergebenen Parameter und die zurückgegebenen Werte genau mit der Funktionssignatur in der DLL übereinstimmen.