Page 1 sur 1

Ven 13/09/2013 - Intégration

Posté : ven. 13 sept. 2013 19:13
par Xavier
Intégration


Une première phase de l'intégration est prête.
Des options permettent d'associer dans la base de registre les deux extensions :
Options.png
(Afin d'avoir les privilèges nécessaires à la création de clés dans la registre, XT4 sera systématiquement livré avec son fichier Manifest.)


Une icône spécifique a été préparée puis injectée en tant que ressource dans le programme, Windows peut donc l'extraire pour afficher les fichiers de données :
FileIcon.png
La prochaine phase va consister à récupérer les fichiers ainsi envoyées par double-clic.
L'application étant déjà en mémoire, Windows va lancer une autre instance de XT4 et lui passer en paramètre le ou les fichiers.
Il y a un mécanisme qui empêche le lancement de plusieurs instances dans des répertoires différents : la seconde instance va trouver la signature (Mutex) du premier XT en mémoire, et va s'auto-terminer.
Il va falloir adapter ce mécanisme afin que:
  • L'instance appelée par Windows envoie à la première le ou les fichiers passés en paramètre avant de s'auto-terminer.
  • L'instance existante intercepte le message, et lance une fenêtre d'import en pré-sélectionnant le fichier envoyé.

Re: Ven 13/09/2013 - Intégration

Posté : sam. 14 sept. 2013 00:51
par Denis
facile, post message

Re: Ven 13/09/2013 - Intégration

Posté : sam. 14 sept. 2013 18:19
par Xavier
Oui, c'est aussi ce que je pensais, mais il a quand même fallu passer par l'envoi d'un message WM_CopyData avec sa structure dédiée, puis injecter des créations de logs externes (vers fichier) pour contourner l'impossibilité de debug de la seconde instance lancée par Windows au double-clic, avant de découvrir que WM_CopyData ne supportait pas l'asynchrone et que le PostMessage devait être remplacé par un SendMessage :
ERROR_MESSAGE_SYNC_ONLY
1159 (0x487)
The message can be used only with synchronous operations.

Re: Ven 13/09/2013 - Intégration

Posté : sam. 14 sept. 2013 18:33
par Denis
ah oui, sendMessage, possible. Je crois que j'avais déjà galéré avec SIMM ou Org pour gérer le SingleInstance (et encore, je ne transférais pas de data entre elles)