Je travaille un projet visant à remplacer un système de gestion des ressources (QuickTime Resource Manager sur Mac et Windows) qui a été obsolète et j'utilise le modèle actuel que Qt utilise Qt où les données sont extraites du fichier de ressource à l'aide d'une chaîne Touche.
Par exemple, je peux avoir une image dans mon fichier de ressources, "HungryBear.png" stocké dans mon fichier de ressources. Qt, et mon système proposé, l'obtiendrait d'une manière représentée par le pseudocode: p> Il est clair à ce point ce que cette image est, et où il se trouve . P> Dans notre système actuel, nous utilisons des chiffres. Les problèmes de chiffres sont que l'on doit chasser le fichier de ressources (il peut y avoir beaucoup) pour savoir quelle image (ou quelle ressource) elle est. P> un exemple de ceci: p> oldActiveResourceFile = GetActiveResourceFile(); // think of a stack of resource files
SetActiveResourceFile("BearPlugin");
image = GetImageResource(1);
// Perhaps other resources are retrieved and other functions called
// Possibly introduce problems by calling functions that change "Active Resource File"
SetActiveResourceFile(oldActiveResourceFile);
4 Réponses :
Ce type de casse la séparation du contenu du code. Un fichier RES est plus facile à modifier que les fichiers de code N contenant des références codées en papier à des images. Peut-être envisager de mettre ces chaînes dans un objet de réglages qui obtient [de] sérialisé sur la charge / le déchargement. P>
Le contenu est déjà séparé du code dans les fichiers de ressources. Ces fichiers peuvent être modifiés séparément avant ou pendant l'exécution du code. Ce que je cherche, c'est tout matériel de soutien qui favorise les identificateurs de chaîne sur les identificateurs arbitraires faisant référence à un fichier de ressources indexé.
Je suis désolé, j'ai mal interprété le modèle "A / B / C.PNG" comme un fichier de fil de fichier plutôt que par une référence à une ressource.
Aucun problème. J'utilise le paradigme du chemin de fichier car nos développeurs le comprendront et, c'est en fait précis (par rapport au fichier de ressources contenant). Le ou les fichiers de ressources seront des fichiers ZIP avec les fichiers de ressources intégrés à l'intérieur d'eux.
C'est simplement beaucoup plus pratique, les noms peuvent être auto-documentant. p>
Les travaux de ressources sont souvent utilisés dans les efforts d'internationalisation. Et il existe des outils qui numérisent les fichiers source, modifient toutes les chaînes aux appels de fonction pour obtenir une ressource similaire nommée et générer la cartographie par défaut. P>
Dans le code, vous pouvez toujours lire ce qui est émis dans la langueuse par défaut. P>
Dans le forfait de traduction, vous mappez la langue par défaut sur le languge ciblé. p>
Cela facilite considérablement ce processus. P>
C'est intéressant. Je peux le voir être utile pour la gestion des ressources de cordes et peut faire partie du système. Cependant, cette réponse ne m'aidait pas réellement à soutenir ma proposition d'accéder aux ressources abusives à l'aide d'un identifiant de chaîne significatif.
N'oubliez pas que souvent les icônes, les images, les clips sonores, etc. ... doivent être internationalisés. Il serait confus d'utiliser plusieurs systèmes de cartographie.
Merci, je ne les ai pas oubliés. Je prévois d'y accéder par le nom. Les données contenues à ce nom de référence seront localisables.
Les principaux inconvénients à l'utilisation d'ID de ressources numériques sont la découvrabilité (déterminer quelle ressource 1234 est) et maintenir l'unicité des identifiants que vous ajoutez plus au fil du temps dans les grandes applications. P>
L'inconvénient principal à l'utilisation de noms de chaîne pour les identifiants de ressources est que les chaînes prennent plus de mémoire au moment de l'exécution. Le modèle .NET pour les ressources, par exemple, utilise des noms de chaîne et la balise de noms de chaîne dans le fichier exécutable au moment de l'exécution. p>
Les noms de cordes sont faciles à garder uniques et à documenter automatiquement entre grandes applications et années de révisions (en utilisant des chemins hiérarchiques comme dans votre exemple), mais la prestation n'est vraiment que pour la commodité humaine. Ce serait bien si ces chaînes pouvaient être bouillies à des ID entier pour le binaire exécutable final, car le pool de ressources est immuable à ce point et la CPU préférerait réellement les ID entier. .NET ne fonctionne pas de cette façon, mais d'autres plates-formes pourraient. P>
En fait, dans notre cas, les ressources seront mutables lors de l'exécution de l'application. Nos localisateurs (externes à la compagnie) pourront modifier les ressources, par exemple dans une fenêtre de dialogue et être capables de fermer et de réaffecter la fenêtre de la boîte de dialogue pour voir leurs modifications.
La ressource Content i> est mutable par des traducteurs, mais la ressource IDS i> ne sont pas mutables une fois qu'ils ont été compilés dans l'Exectue. Dans un scénario de compilateur de ressources, les noms de cordes des ressources peuvent toujours être démontrés à des traducteurs, même si les chaînes volumineuses ont été réduites pour compiler des entiers de compilation par le processus de compilation EXE.
Je ne suis pas sûr de suivre. Une somme de contrôle serait-elle créée dans le code et le système de ressources qui recherchent la ressource ferait? Quelque chose? Rechercher la ressource? Créez des checksums en analysant le fichier de ressources lors du lancement?
Non, une somme de contrôle ne peut pas garantir l'unicité (à moins que ce soit très grand). Voici comment la compilation de ressources pourrait fonctionner (mais pas dans .NET): Dans le cadre du processus de construction de l'application, le compilateur de code source reconnaît les chaînes utilisées comme identifiants de ressources et crée une table de hachage des chaînes de ressources uniques qu'il trouve dans le code. Numéro chaque chaîne dans la table de hachage pour créer des ID de ressources entier uniques. Compilez les ID INT dans l'EXE et la table de ressources. Sortie de la carte String-int dans un fichier afin qu'il puisse être utilisé pour afficher les noms de ressources aux traducteurs plus tard.
OpenWithNumericExample OfferStringsInComparison CommentOnGreaterReadabilityOfLatter PointOutGreatDebuggingAdvantageOfLatter
Le code sera écrit en C ++ pour Mac OS X et Windows XP / Vista / 7. Je prévoyais de faire le (s) fichier (s) de ressources) un fichier zip contenant les données pouvant être: 1) Fichiers d'image, 2) Fichiers de chaîne localable, 3) Définition de la boîte de dialogue Fichiers texte, 4) Fichiers audio, 5) Autres fichiers de ressources .