Compatibilité

michelakate Messages postés 1 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 16 janvier 2008 - 16 janv. 2008 à 20:06
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 17 janv. 2008 à 12:57
En Visual C++ Comment écrire une application et la rendre compatible avec les interfaces d'autres langages de programmation?

michou

1 réponse

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
17 janv. 2008 à 12:57
Bienvenue !


Je suis pas sûr de comprendre la question...


Quand on veut faire du code réutilisable dans d'autre langage, en règle
général, on fait une dll. On peut faire un service ou une application
lancée en tache de fond et qui communique avec une application dans un
autre langage. On peut aussi s'appuyer sur la compilation séparée, mais
je ne l'ai jamais vu faire en pratique.


Pour ce qui est des dlls, il y a de nombreux problèmes de
compatibilité. Il peuvent  même arriver entre une application en C
communiquant avec une dll en C si on ne fait pas un peu attention.


Tu as le choix entre deux types de dlls : les dlls COM et les dll classiques.


Les dlls ActiveX : Elles sont assez complexes à réaliser en C++, mais
souvent très facilement réutilisables. Elles permettent d'exporter des
classes. Elles sont utilisables depuis de nombreux langages, incluants
ceux utilisant le dotnet, le VB6, les langages de scripts tels le
VBScript et le JScript, le Delphi... Le mécanisme de ces dlls est
souvent critiqué pour ses performances moins bonnes.


Les dlls classiques : Les dlls classiques exportent des fonctions.
Contrairement aux dlls ActiveX, la dll ne contient aucune information
sur les prototypes des fonctions et les structures nécessaires. Elle ne
définit que les noms des fonctions exportées. Il faut donc traduire le
header de la dll dans tous les langages dans lequel on souhaite la
réutiliser... Il est préférable d'utiliser la convention d'appel
stdcall en remplacement de la cdecl classique du C, pour être
compatible avec un maximum de langage. Règle fondamentale : les
allocations dans la dlls doivent être libérées dans la dll. Autrement
dit, on est souvent obligé d'utiliser des tampons, comme lorsque l'on
utilise l'API Win32. Les types doivent tous être relativement simple :
Pas de classes mais des struct, pas de String, mais des char *...
Attention à la taille des booléens : le plus simple est de les faire
sur 32 bits avec le type BOOL.


Voilou voilou. Bon courage.
0
Rejoignez-nous