3Fermer5
Kevin KoflerLe 07/05/2012 à 00:41
Lepzulnag (./1) :
J'ai deux idées en tête pour résoudre ce problème mais je ne saurais trouver la meilleure :

1) transformer ma librairie statique en librairie dynamique?2) j'ai entendu parler d'un moyen de passer la protection des 65 ko. Est-ce une bonne solution, c'est-à-dire simple et efficace?

Franchement, elles sont toutes les deux mauvaises. Le vrai problème est la taille, 20 Ko pour des boîtes de dialogue n'est tout simplement pas acceptable!

Donc pour commencer, il faudrait te demander s'il valait vraiment le coup de réinventer la roue, sachant que AMS fournit déjà un système de dialogues. Forcément, réinventer ses propres dialogues prend de la place! (Place qui à mon avis serait mieux utilisée pour des fonctionnalités que le système d'exploitation ne propose pas encore…)

Ensuite, il faut savoir que dans une bibliothèque (lib) statique, seules les fonctions effectivement utilisées (à condition que tu utilises les options par défaut de l'EDI, notamment -ffunction-sections lors de la compilation de la lib et "Remove unused sections" lors du linking de l'application, sinon c'est carrément par fichier .c) seront effectivement linkées. Donc si tout ton code est dans une seule fonction, c'est très mauvais, il faut décomposer ton code. Au lieu de mettre tout ton code dans la fonction équivalente à DialogDo, mets-la dans des fonctions auxiliaires que tu appelles par pointeur de fonction, et fais en sorte que tes fonctions équivalentes à DialogAdd* mettent les pointeurs vers les bonnes fonctions auxiliaires dans la structure de ton dialogue. Ainsi, si tu n'utilises par exemple pas d'entrées de texte dans un programme, le code pour les entrées de texte ne sera pas inclus.