Bonjour,
dans le magnifique monde de Windows, il existe deux types de programmes, écrits dans deux types de langages : les programmes "managés" (les langages .NET, comme C# ou VB .NET) et les programmes "natifs" ou "non managés" (C, C++, VB pas très net...).
Cliquez pour révéler
Cliquez pour masquer
Il existe une troisième catégorie en fait, constituée des langages interprétés, comme notamment tous les langages de scripts. Sans parler de Java qui est similaire aux programmes en code managé, mais c'est pas tout à fait pareil et pas du tout compatible car ce serait trop facile.
Les programmes en code natif (non managés) sont directement écrits en langage machine, executable par les processeurs x86.
Alors que les programmes en code managé (.NET) sont écrits dans un langage intermédiaire (IL) qui est interprété par une machine virtuelle (le Framework .net). Le principe est le même pour les programmes en Java (mais avec une machine virtuelle différente : la machine Java).
C'est pourquoi les DLL managées sont utilisables simplement dans les programmes managés. Et les inversement, les DLL non managées sont utilisables simplement dans les programmes non managés.
Maintenant il existe des astuces pour appeler une DLL d'un type depuis un langage d'un autre type, mais c'est beaucoup plus galère (cf les liens déjà fournis).