ProgrammationDéveloppeur Desktop .NET

Comment organiser le travail avec des bibliothèques externes (DLL) et des objets COM dans Visual Basic. Quelle est la différence entre Add Reference et Declare, et quels sont les points à connaître pour l'interopérabilité ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Le travail avec des bibliothèques externes étend les possibilités de Visual Basic, permettant d'utiliser non seulement des classes standard, mais aussi des composants tiers – tant des bibliothèques .NET (DLL) que des objets COM classiques.

Historique de la question

À l'origine, VB était principalement conçu pour interagir avec des composants COM (ActiveX, OCX), permettant de connecter de telles bibliothèques via "Project – References". Avec l'apparition de VB.NET, il est devenu possible de référencer des assemblies .NET et d'utiliser plus facilement des méthodes externes via P/Invoke (Declare).

Problème

La principale difficulté réside dans le choix correct du mode d'intégration pour éviter les erreurs d'exécution, les problèmes de compatibilité et les fuites de ressources lors des interactions avec du code externe.

Solution

Dans .NET, pour utiliser des bibliothèques .NET ou des composants COM enregistrés, on utilise Add Reference, ce qui ajoute une référence à l'assembly ; pour appeler des procédures à partir de DLL natives, on utilise Declare.

Exemple d'utilisation d'une bibliothèque .NET (Add Reference) :

' Après avoir ajouté la référence .NET Imports System.IO Dim reader As New StreamReader("file.txt") Dim line As String = reader.ReadLine() reader.Close()

Exemple d'appel d'une fonction de WinAPI (Declare) :

' Appel d'une fonction de user32.dll (WinAPI) Declare Function MessageBeep Lib "user32" (ByVal wType As Integer) As Boolean Sub TestBeep() MessageBeep(0) End Sub

Caractéristiques clés :

  • Add Reference pour .NET/COM, Declare pour des fonctions stdcall à partir de DLL.
  • Nécessité de gérer correctement les ressources lors du travail avec du code externe.
  • Différence de syntaxe et paramétrage nécessaire de la plateforme et de la compatibilité.

Questions piégeuses.

Peut-on utiliser la construction Imports pour charger des fonctions à partir de DLL externes ?

Non, l'opérateur Imports simplifie uniquement l'accès aux espaces de noms au sein des assemblies référencées, mais ne peut pas être utilisé pour le chargement dynamique de fonctions à partir de DLL natives.

Faut-il enregistrer des assemblies .NET pour les utiliser via Add Reference dans VB.NET ?

Non, les bibliothèques .NET s'ajoutent simplement par référence, et seules les bibliothèques COM nécessitent une inscription via regsvr32.

Peut-on utiliser Declare pour connecter des méthodes .NET, et pas seulement des fonctions Win32 natives ?

Non, Declare s'applique uniquement aux fonctions des DLL ordinaires (non .NET) exportant des fonctions stdcall/FARPROC. Les fonctions .NET sont appelées via Add Reference/Imports.

Erreurs courantes et anti-patterns

  • Mélange involontaire des approches Add Reference et Declare, tentative d'appeler des fonctions .NET via Declare.
  • Ignorer la nécessité de libérer correctement les objets COM (Marshal.ReleaseComObject).
  • Erreurs de pointeurs et incompatibilité de types lors de l'appel de code externe.

Exemple de la vie réelle

Cas négatif

Un développeur a décidé d'utiliser une bibliothèque .NET tierce via Declare, sans avoir étudié la documentation, et a obtenu une erreur à l'étape de compilation.

Avantages :

  • Intégration rapide, si le composant est une DLL standard.

Inconvénients :

  • Échec à l'étape de compilation.
  • Ne fonctionne pas pour des assemblies .NET.

Cas positif

Ajout correct d'une référence .NET via Add Reference, puis utilisation d'Imports et création d'instances des classes requises.

Avantages :

  • Intégration fiable avec du code .NET.
  • Gestion automatique de la mémoire.

Inconvénients :

  • Pour certains composants COM, leur inscription est nécessaire.