Stocker valeur ordinale dans dll

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 20 févr. 2008 à 11:39
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 21 févr. 2008 à 12:33
Salut a tous,
voila ma situation : j'ai une application qui, selon son parametrage, charge une dll parmi un ensemble de dll possibles, afin de personnaliser l'application (fonctionnalités, apparence, ...). Entre autres, cette dll contient une couleur de "theme" de l'application. Ma question est donc:
Comment stocker cette couleur dans la dll?
Actuellement, j'ai fait une fonction GetCouleur: TColor qui me retourne la couleur associée a la dll. Cette fonction est comme un constante pour la dll, elle est implementée comme ca:
function GetCouleur: TColor;
begin  
    Result := $FF;
end;

je me demande si il n'y a pas un autre moyen de la stocker, dans les ressources par exemple (un peu comme les resource string).
Je pensai utiliser une resource RCDATA.
Qu'en pensez-vous?
Peut etre connaissez vous une fonction simple pour lire une valeur ordinale dans un RCDATA?

Merci de vos remarques / commentaires.

3 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
20 févr. 2008 à 12:29
non non, un RCData serait trop complexe pour ça ...

la fonction est une bonne methode mais pas forcement la meilleur.

sinon le fichier INI reste un bon compromis pour ce genre de chose.

<hr size="2" width="100%" />
http://deefaze.gnomz.com
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
20 févr. 2008 à 13:36
hmmmm ca m'embete un peu d'utiliser un ini. j'aimerais bien que la dll soit vraiment independante, et qu'il ne faille pas lui associer un fichier (ini).
Crois tu que ce soit vraiment compliqué d'utiliser le RCDATA? j'ai pas encore regardé comment ca fonctionne, mais n'est il pas possible de faire un truc du genre :
LoadResource(HDll, RT_RCDATA, @MaCouleur, sizeof(integer));

ou sinon, autre possibilité, mais pas tres propre:
MaCouleur := StrToInt(LoadResourceString(HDll, 'macouleur'));

Qu'en pense tu?
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
21 févr. 2008 à 12:33
j'ai essayé comme ca, ca marche bien et c'est pas trop compliqué :

  cl1 := 0;

  DllHandle := LoadLibrary('c:\test.dll');
  if DllHandle <> 0 then
  begin
    try
      Stream := TResourceStream.Create(DllHandle, PChar('couleur1'), PChar('Couleurs'));
      try
        Stream.Read(cl1, sizeof(integer));
      finally
        Stream.Free;
      end;
    finally
      FreeLibrary(DllHandle);
    end;
  end

il faut juste que je trouve un moyen simple c'ajouter ces données dans mon .res simplement. (pour ce test j'ai utilisé XN Resource Editor)
0
Rejoignez-nous