Puisque nobugz a déjà couvert votre première question, permettez-moi de développer la seconde. Ce n'est pas très difficile à comprendre. Lorsque vous compilez une DLL dans Windows, l'éditeur de liens crée une table d'adresses d'exportation (EAT) qui répertorie toutes les fonctions exportées (fonctions fournies par la DLL) et un pointeur vers l'emplacement où elles sont implémentées dans la DLL elle-même. Lors de la compilation d'une application qui lie à une DLL, l'éditeur de liens crée une table d'adresses d'importation (IAT) énumérant toutes les fonctions implémentées dans les autres DLL et le nom de la DLL qui implémente ces fonctions. La façon dont il sait qu'une fonction existe dans une DLL provient du fichier .lib que vous ajoutez à votre projet. Cela indique à l'éditeur de liens qu'une fonction est implémentée dans une DLL. Puis lors de l'exécution, lors du chargement d'une application, le chargeur Windows examine l'IAT pour voir quelles DLL doivent être chargées, les localise et met à jour les applications IAT (en mémoire) pour pointer vers les fonctions exportées dans la DLL chargée .
C'est la base de la façon dont cela fonctionne, j'espère que je n'ai pas inclus d'inexactitudes grossières. Et bien sûr P/Invoke est une autre couche en plus de cela.
Si vous souhaitez plus d'informations sur la façon dont le travail de DLL, il y a toujours le MSDN documentation et si vous voulez suffisamment de détails pour vous faire tourner la tête lire ces articles Inside Windows Part 1 et Part 2
Je pense que vous voulez dire « studio » dans le titre , pas "stdio" qui est quelque chose de totalement différent B-) (Et évidemment, je ne peux plus éditer, je crois que je pouvais ... hrm) –
Je pense que ça devrait être deux questions distinctes, puisque # 2 a très peu à voir aveC# 1. –
Il n'y a aucune différence, Visual C++ fait partie de Visual Studio 2005. VC++ 6.0 est une version antérieure. –