Problème TPluginHeader

Discussion de programmation pour éviter d'empiéter dans les autres forums

Modérateurs : Modérateurs, Développeurs

Benjamin
Membre d'honneur
Membre d'honneur
Messages : 1075
Inscription : 29 oct. 2003 14:53
Version de PhotoFiltre : 6.0
Système d'exploitation : Windows 2000 SP 4
Processeur : Pentium IV 2,4Ghz
Mémoire RAM : 512Mo DDR 333
Localisation : 21

Problème TPluginHeader

Message par Benjamin »

Je suis en train de transformer les unités pascal en unités C

Malheureusement cela ne marche pas :cry:

En fait je pense que cela vient de ma structure TPluginHeader

La version Delphi est la suivante :

Code : Tout sélectionner

TPluginHeader = packed record
    Caption: array[0..MaxShortStr] of Char;
    Version: array[0..MaxShortStr] of Char;
    PluginType: Integer;
    Author: array[0..MaxShortStr] of Char;
    Comment: array[0..MaxLongStr] of Char;
    Reserved: array[0..MaxLongStr] of Char; // non utilisé
    Flags: Integer; // pour l'activation du menu
  end;
Alors que dans Democ.h

Code : Tout sélectionner

struct  PluginHeader
{
  char		Caption[MaxShortStr + 1];
  char		Version[MaxShortStr + 1];
  UINT		PluginType;
  char		Author[MaxShortStr + 1];
  char		Commentaire[MaxShortStr + 1];
  char		Reserved[MaxShortStr + 1];
  UINT		Flags;
};
En fait j'ai MaxShortStr pour Comment et Reserved alors que y a MaxLongStr en Delphi...
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12830
Inscription : 28 oct. 2003 22:49

Message par Antonio »

Pour Comment et reserved il faut utiliser MaxLongStr, ça marche tant qu'on dépasse pas mais je préfère MaxLongStr quand même.
La référence est l'unité Delphi V 1.4
Benjamin
Membre d'honneur
Membre d'honneur
Messages : 1075
Inscription : 29 oct. 2003 14:53
Version de PhotoFiltre : 6.0
Système d'exploitation : Windows 2000 SP 4
Processeur : Pentium IV 2,4Ghz
Mémoire RAM : 512Mo DDR 333
Localisation : 21

Message par Benjamin »

D'accord de toute façon ca ne marche pas dans les 2 cas en gros quand je trace j'ai :

DllEntryPoint
RegisterPluginLanguage (ajouté pour tester)
RegisterPluginHeader

et puis plus rien!!! Normalement c'est quelle fonction qui devraient être appelée? Et surtout quel tests sont effectués qui font que le plugin n'est pas chargé??!?
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12830
Inscription : 28 oct. 2003 22:49

Message par Antonio »

Il y a RegisterCompatibility qui doit rencoyer 2 en C pour utiliser les nouvelles fonctions
Benjamin
Membre d'honneur
Membre d'honneur
Messages : 1075
Inscription : 29 oct. 2003 14:53
Version de PhotoFiltre : 6.0
Système d'exploitation : Windows 2000 SP 4
Processeur : Pentium IV 2,4Ghz
Mémoire RAM : 512Mo DDR 333
Localisation : 21

Message par Benjamin »

Oki c'est bon j'ai compris d'ou venait le problème en fait C++Builder m'avait ajouté :

#pragma pack(push,1)

et

#pragma pack(pop)

que j'avais supprimé en fait c'est la traduction de la directive package de Delphi

Bon je vais laisser ca comme ca pour le moment...

Par contre je suis pas sur que ca soit le meilleur choix pour la compatibilité...

Je pense qu'il serait pas mal de supprimer la directive package et de changer la valeur des constantes MaxShortStr de 64 à 63 et MaxLongStr de 256 à 255 pour ne pas avoir de problèmes...
Dernière modification par Benjamin le 31 mars 2004 20:32, modifié 1 fois.
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12830
Inscription : 28 oct. 2003 22:49

Message par Antonio »

En théorie tu peux virer su tu supprime le "+ 1", je vais peut être le faire en Delphi aussi pour éviter ces pb mais ça oblige à recompiler tous les plugins donc à voir...J'avais pas pensé à ça au moment ou je l'ai fait !

Code : Tout sélectionner

struct  PluginHeader 
{ 
  char      Caption[MaxShortStr]; 
  char      Version[MaxShortStr]; 
  UINT      PluginType; 
  char      Author[MaxShortStr]; 
  char      Commentaire[MaxShortStr]; 
  char      Reserved[MaxShortStr]; 
  UINT      Flags; 
};
Dernière modification par Antonio le 31 mars 2004 20:37, modifié 1 fois.
Benjamin
Membre d'honneur
Membre d'honneur
Messages : 1075
Inscription : 29 oct. 2003 14:53
Version de PhotoFiltre : 6.0
Système d'exploitation : Windows 2000 SP 4
Processeur : Pentium IV 2,4Ghz
Mémoire RAM : 512Mo DDR 333
Localisation : 21

Message par Benjamin »

Sinon événtuellement mettre les champs importants en premier dans la structure PluginType & Flags
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12830
Inscription : 28 oct. 2003 22:49

Message par Antonio »

Ouai mais ça oblige aussi à recompiler tous les plugins, donc pour les utilisateurs...
Benjamin
Membre d'honneur
Membre d'honneur
Messages : 1075
Inscription : 29 oct. 2003 14:53
Version de PhotoFiltre : 6.0
Système d'exploitation : Windows 2000 SP 4
Processeur : Pentium IV 2,4Ghz
Mémoire RAM : 512Mo DDR 333
Localisation : 21

Message par Benjamin »

Oui c'est clair que c'est un peu embetant ca :(

En tout cas moi j'ai réussi à faire mon premier plugin en C

Il reste plus qu'a fignoler un peu mon sdk C mais y a quand même

TImageInfos = record
FileName: string;
Width: Integer;
Height: Integer;
ColorCount: Integer;
TransparentColor: TColor;
end;

qui pose problème à cause du string
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12830
Inscription : 28 oct. 2003 22:49

Message par Antonio »

tu peux remplacer sans pb par "char FileName[MaxShortStr + 1]" car il n'y a pas d'echange à ce niveau avec PhotoFiltre. Il faut juste modifier la boucle avec EnumImage
Benjamin
Membre d'honneur
Membre d'honneur
Messages : 1075
Inscription : 29 oct. 2003 14:53
Version de PhotoFiltre : 6.0
Système d'exploitation : Windows 2000 SP 4
Processeur : Pentium IV 2,4Ghz
Mémoire RAM : 512Mo DDR 333
Localisation : 21

Message par Benjamin »

ah oui effectivement je vais essayer de traduire ca mais avec MaxLongStr par contre
pf

Message par pf »

Un avis? :
-Les structures doivent etre alignées sur 32 bits. Certains compilateurs aligne les data sur 8 bits par défaut (dans Borland C.5 c'est dans Project Options=>32-Bits compiler=>Processor=>Data Alignment=>Double Word(4-bytes).
-On peut pas supprimer le "+1" a la fin de [MaxShortStr], je l'ai fait, j'ai eu des problemes bien penibles du genre "un coup ca marche,un coup ca marche plus!"
-Je pense que string et un pointeur (char*) sur une chaine initialisée et terminée par le classique zéro, sinon je ne vois pas comment ca pourais marcher.
Bon courage & A+
Benjamin
Membre d'honneur
Membre d'honneur
Messages : 1075
Inscription : 29 oct. 2003 14:53
Version de PhotoFiltre : 6.0
Système d'exploitation : Windows 2000 SP 4
Processeur : Pentium IV 2,4Ghz
Mémoire RAM : 512Mo DDR 333
Localisation : 21

Message par Benjamin »

oui je suis d'accord d'ailleurs par defaut Delphi le fait pour les record sauf si l'on spécifie l'option package ce qui est la cas pour le moment

Pour éviter ca j'ai proposé de réduire MaxShortStr et MaxLongStr de 1 ce qui ferait qu'en ajoutant le 0 de fin chaine et quelque soit l'alignement du compilateur il n'y aurait pas de problème... Mais cela oblige à recompiler tous les plugins existant...
pf

Message par pf »

En effet, ca ferais un alignement nickel, et je pense que quelque soit la decision, il vaut mieux la prendre pendant que le nombre de plugins existant est résonable!
Ca reste ch...t pour les utilisateurs, surtout s'ils n'ont pas l'adsl !
Cela dit, ca marche comme ca, alors.......... ?
Juste une question Benjamin, Quelle version de CBuilder utilise tu ?
A+
Mifo
Habitué(e)|Habitué|Habituée
Habitué(e)|Habitué|Habituée
Messages : 95
Inscription : 22 mars 2004 13:18
Version de PhotoFiltre : la dernière !
Système d'exploitation : Windows XP
Processeur : AMD XP 1800+ ATHLON
Mémoire RAM : 512 MB DDR 2100
Localisation : Québec

Message par Mifo »

Salut,

Je ne comprends pas grand chose à votre conversation mais en ce qui concerne ceci :

«alignement nickel, et je pense que quelque soit la decision, il vaut mieux la prendre pendant que le nombre de plugins existant est résonable!
Ca reste ch...t pour les utilisateurs, surtout s'ils n'ont pas l'adsl ! »

Personnellement j'ai un modem 56k et je viens tout juste de télécharger PhotoFiltre et tout les greffons. A peu près 15 minutes. C'est pas la fin du monde!

Cependant je rendrais les nouveaux greffons disponibles en même temps que la 5.7. Pas avant.

Aussi mettre une note explicative dans les news expliquant le pourquoi de ces modifs.