Lorsque vous écrivez du code en VB6, le résultat compilé est un composant COM. Les composants COM fournissent des interfaces, des coclasses, des structs et des enums, qui sont normalement décrits à l'aide d'une bibliothèque de types COM. Cependant, pour consommer ce composant COM dans .NET, vous avez besoin d'une description de type dans un format que .NET comprend, c'est-à-dire un assemblage .NET (puisqu'il ne peut pas travailler directement avec les bibliothèques de types). Un assemblage interop n'est donc qu'une bibliothèque de types COM "convertie", dans le sens où il contient des descriptions d'interfaces, de structures, etc. qui correspondent aux mêmes éléments dans une bibliothèque de types.
(Ce qui précède est quelque peu simplifié, car l'assemblage interop n'est pas ont à produire à partir d'une bibliothèque de types - vous pouvez en coder un à la main si vous le souhaitez, par exemple).
Contrairement à ce qui est souvent dit, une assembly interop ne contient aucun code exécutable et ne fait aucun marshalling. Elle ne contient que des définitions de type, et le seul endroit où elle peut avoir des méthodes est dans les interfaces, et les méthodes dans les interfaces n'ont pas d'implémentation. La mise en correspondance des appels .NET avec les appels COM est en fait effectuée par le CLR lui-même sur la base des descriptions de type chargées à partir des assemblages interop - il génère tout le code nécessaire à la volée.
Maintenant, pour répondre à votre question. Vous devez enregistrer votre DLL COM (la sortie de votre projet VB6) - par exemple, en utilisant regsvr32.exe
. Vous ne devriez pas (en fait, vous ne pouvez pas) enregistrer un assemblage interop de cette façon, car il ne s'agit pas d'un composant COM - c'est juste un assemblage .NET ordinaire, donc vous pouvez soit le mettre dans le même dossier que votre .exe/.dll, soit le mettre dans le GAC, comme d'habitude.