Quelle est la meilleure façon de concevoir une API C pour dll qui traite le problème du passage des "objets" qui dépendent de l'exécution C (FILE *, pointeur retourné par malloc, etc ...) . Par exemple, si deux DLL sont liées à une version différente de l'exécution, je crois comprendre que vous ne pouvez pas transmettre un FICHIER * d'un DLL à l'autre en toute sécurité.C Objets Runtime, limites dll
Est-ce la seule solution à utiliser une API dépendante de Windows (qui est garantie pour fonctionner avec les DLL)? L'API C existe déjà et est mature, mais a été conçue à partir d'un POV unix, pour la plupart (et doit encore fonctionner sur unix, bien sûr).
Je comprends les problèmes - Je demande des réponses à ce problème :) J'espérais une solution qui ne suppose pas de changer l'API C existante (avec FILE * dans la signature et ainsi de suite), mais il semble qu'il n'y a pas 't si je ne peux pas garantir tout à lier contre le même runtime C? Bien que le problème soit théoriquement le même sur Unix, il s'agit rarement d'un problème car il n'existe qu'un seul cycle d'exécution C. Je n'ai jamais eu un seul problème en passant FILE *, les descripteurs de fichiers sur unix entre les bibliothèques - beaucoup de C APIS sont conçus de cette façon et fonctionnent parfaitement sur ces systèmes d'exploitation. –
Si avoir FICHIER * dans la signature de l'API n'est pas une bonne pratique, comment traitez-vous les flux de fichiers? Avez-vous besoin d'exporter les fonctions pour ouvrir et fermer les fichiers si la DLL que vous appelez a certaines fonctions qui appellent en interne fprintf et d'autres fonctions qui attendent FILE *? –
J'ai fait une suggestion une solution :) Ne pas lier statiquement à la CRT. lien vers MSVCRT.DLL. Je serais très surpris si toutes les bibliothèques CRT sous Linux, Unix ou le MAC fonctionnaient sans problème. Je pense que vous avez été chanceux là aussi. – Foredecker