Hmm COM c'est assez bordélique à utiliser malheureusement... Et pour ce qui concerne l'import des bibliothèques en C++ je ne pourrai t'être d'aucune aide
Enfin bon, à savoir tlb c'est "Type LiBrary", c'est un fichier de définition de ce qu'il y a dans ton composant COM, similaire aux fichiers .lib pour les DLL natives normales.
Après, j'ai toujours pensé qu'il y fallait des header C/C++ qui définissaient proprement les interfaces utilisables par ta DLL (peut être qu'un outil .tlb => .h existe déjà d'ailleurs) comme c'est le cas pour bon nombre d'API Microsoft utilisant COM, mais les recherches google pointent vers une directive #import "machin.tlb"... Je suppose que c'est ce que tu devrais faire, mais ensuite je ne sais pas comment tu accèdes aux types définis dedans
Par contre je ne comprends quand même pas trop un truc, pourquoi faire une interface COM entre C++ et C# ? Tu pourrais utiliser les
Managed Extensions for C++ Programming (évolution de Managed C++) pour accéder directement à tes DLL C#. Celà aurait pour effet/obligation de créer un assembly mixte natif/managé, ce qui normalement est sans effet sur les parties natives de ton code, mais te permet d'utiliser directement le CLR
A moins que tu ne sois (bêtement) contraint à séparer code natif et managed, il me semble que c'est de loin la solution optimale, et peu-être aussi la plus simple (car dans un cas comme dans n'importe quel autre, le runtime .NET sera requis, et chargé dans l'espace mémoire de ton application, donc autant réduire la surcharge des wrapper inutiles à 0

)