Tu ne peux pas à proprement parler mettre des fichiers d'entête dans une DLL. Une DLL c'est du code compilé, qui contient les
définitions de tes fonctions/classes. Ensuite, tu fournis les
déclarations à l'utilisateur de ta DLL, dans des fichiers .h donc (sauf si tu veux en plus de ta DLL fournir du code compilé linké statiquement, mais bon on s'écarte). Les avantages d'une DLL étant les suivants:
- tu n'as pas besoin de recompiler le code qui utilise la DLL dans le cas où tu ne changes pas l'interface (c'est à dire les déclarations que tu fournis à l'utilisateur). Tu dois juste recompiler la DLL et donner la nouvelle version de la DLL
- une DLL peut être partagée entre plusieurs processus
- dans une moindre mesure, si tu as plusieurs exécutables/bibliothèques qui utilisent effectivement du code commun, les linker dynamiquement à une DLL réduira la taille des exécutables par rapport à un linkage statique (où tous les symboles sont copiés dans chaque binaire utilisant le code commun)
Il est n'est pas vrai que coder en C++ est 10 fois plus long, plus dur, et nécessitant beaucoup plus de connaissances qu'en C# par exemple. À vrai dire si tu t'en tiens au C++ moderne et aux derniers standards (C++14, C++11), tu as moyen de pouvoir écrire des programmes relativement conséquents avec un temps d'apprentissage court. Il est toutefois vrai qu'il te faudra plus de temps pour maîtriser toutes les subtilités du langage.
Il n'est pas non plus vrai que ton code sera nécessairement plus performant. Un code écrit en C++ est souvent plus performant en effet, ce notamment grâce aux optimisations que le compilateur est capable de faire directement sur le code ASM généré. Les langages utilisant de la compilation JIT ou une machine virtuelle peuvent avoir plus de mal à faire certaines optimisations, bien qu'ils soient en progrès constant.
Les vrais gains de performance apparaissent souvent sur des machines peu performantes, car ici les optimisations faites par le compilateur ET les optimisations faites par le développeur lui même ont beaucoup plus d'importance. Mais aujourd'hui, sur nos machines, qui a vraiment besoin d'optimiser son code? À part si tu travailles sur du code dont le temps d'exécution est CRITIQUE, tu ne devrais pas à avoir à penser aux performances. Tu devrais écrire ton code de la façon la plus concise et la plus expressive possible, et aujourd'hui sur ta machine il sera performant quoiqu'il arrive.
Je parle bien sûr d'optimisations bas niveau directement au niveau du code, et non au niveau des algorithmes. Évidemment, on préfèrera toujours des algorithmes d'une complexité minimale.
Vouloir changer de langage sous prétexte qu'il offre de meilleures performances est TRÈS souvent une erreur.