Mon approche. Le noyau est le moteur. - page 98

 
Pour savoir comment procéder, regardez la structure d'une archive zip. Il se compose de structures et de données simples. Une structure similaire pourrait être idéale pour le transfert de données. Notez qu'il n'y a pas une seule ligne dans l'archive zip, ce qui ne l'empêche pas d'afficher parfaitement un système de fichiers miniature avec des centaines de fichiers aux noms différents.
 
Vasiliy Sokolov:
Pour vous aider à le faire, regardez la structure des archives zip. Il se compose de structures et de données simples. Une structure similaire pourrait fonctionner pour le transfert de données. Notez qu'il n'y a pas une seule ligne dans l'archive zip, ce qui ne l'empêche pas d'afficher parfaitement un système de fichiers miniature avec des centaines de fichiers aux noms différents.

Je suis d'accord avec votre vision professionnelle de la tâche. Le transfert d'octets semble plus sérieux que le transfert de chaînes de caractères via des objets MT.

La question est de savoir si sa mise en œuvre est réalisable.

La taille et les types de données à transférer ne sont pas connus à l'avance. Comment le mettre en œuvre ?

 
Реter Konow:

Je suis d'accord avec votre vision professionnelle de la tâche. Le transfert d'octets semble plus sérieux que le transfert de chaînes de caractères via des objets MT.

La question est de savoir si sa mise en œuvre est réalisable.

La taille et les types de données à transférer ne sont pas connus à l'avance. Comment mettre en œuvre l'union ?

C'est possible.

Veuillez étudier en détail la structure de votre zip. Une compréhension viendra. La taille des fichiers emballés avant l'emballage n'est pas connue. Les noms des fichiers peuvent être de longueurs différentes. Le nombre de dossiers peut également être très différent. Quoi qu'il en soit, le zip représente un ensemble strictement typé de structures finies référençant les données.

Une fois que vous savez avec quelles structures vous devez travailler, il n'y a aucun problème avec l'union, car l'union est simplement une représentation de ces structures sous forme d'octets.

 
Vasiliy Sokolov:

Possible.

Étudiez en détail la structure de la fermeture éclair. Une compréhension viendra. La taille des fichiers emballés avant l'emballage y est inconnue. Les noms de fichiers peuvent avoir de nombreuses longueurs différentes. Le nombre de dossiers peut également être très différent. Quoi qu'il en soit, le zip représente un ensemble strictement typé de structures finies référençant les données.

Lorsque vous aurez déterminé les structures avec lesquelles vous devez travailler, vous n'aurez aucun problème car vous pouvez simplement représenter ces structures sous forme d'octets.

D'accord, mais pourquoi ne pas se passer d'un syndicat, par exemple ?

À chaque événement, l'EA collecte une chaîne de messages, qui comprend tous les paramètres modifiés et leurs valeurs de tous types. Ensuite, nous convertissons cette chaîne en un tableau d' octets à l'aide de StringToChar, et nous l'écrivons dans une ressource. Ensuite, on fait le déballage inverse.

Au départ, j'avais imaginé une telle solution avec la ressource. Mais, il doit assembler et diviser la chaîne.

 
De toute façon, vous ne pouvez pas vous passer d'une ressource dans votre solution. La question est donc de savoir comment contourner l'analyse de la chaîne de caractères. Vous pensez que c'est possible. Honnêtement, j'en doute. Mais je ne l'exclurais pas...
 
Реter Konow:

D'accord, mais pourquoi ne pas se passer de syndicat, par exemple.

À chaque événement, l'EA collecte une chaîne de messages comprenant tous les paramètres modifiés et leurs valeurs de tous types. Ensuite, nous convertissons cette chaîne en un tableau d'octets à l'aide de StringToChar, et nous l'écrivons dans une ressource. Ensuite, nous faisons le déballage inverse.

Au départ, j'avais imaginé une telle solution avec la ressource. Mais, il faut l'assembler et couper la ficelle.

L'union est une représentation simultanée des structures sous forme d'octets ou d'int, ce qui est la même chose. Union semble projeter des structures sur un tableau d'octets alors que le tableau d'octets est simultanément un ensemble de structures. Si la ressource est un tableau d'int, il n'est pas nécessaire d'effectuer la procédure supplémentaire de conversion d'un tableau d'octets en un tableau de structures et l'opération inverse. Cela permet de gagner du temps.

p.s. Avec ce schéma, la source du message ne copie pas les données dans la ressource, elle change les données directement, et ces changements apparaissent dans la ressource en une seule fois. Ainsi, au lieu d'effectuer d'interminables conversions de chaînes en tableaux, et de tableaux en chaînes avec une analyse syntaxique ultérieure, vous travaillez directement avec les données. Ces données sont copiées uniquement aux destinataires utilisant ResourceReadImage.

 
Vasiliy Sokolov:

L'union est la représentation simultanée de structures sous forme d'octets ou d'int, ce qui est la même chose. Union projette en quelque sorte des structures sur un tableau d'octets, et un tableau d'octets est simultanément un ensemble de structures. Si la ressource est un tableau d'int, il n'est pas nécessaire d'effectuer la procédure supplémentaire de conversion d'un tableau d'octets en un tableau de structures et l'opération inverse. Il permet de gagner du temps.

Je dois y réfléchir... Vous avez peut-être raison, et il est possible de mettre en place un syndicat.

Par exemple, si chaque réglage d'une valeur de paramètre, convertissait cette valeur en un tableau d'octets. Plus précisément, tous les paramètres de l'utilisateur, devraient appartenir à l'union. Ensuite, leur copie reflétée en octets sera immédiatement disponible pour l'écriture sur la ressource.

 
Реter Konow:

Par exemple, si chaque réglage d'une valeur de paramètre, convertira cette valeur en un tableau d'octets. Plus précisément, tous les paramètres de l'utilisateur doivent appartenir à l'union. Ensuite, leur copie reflétée par les octets serait immédiatement disponible pour l'écriture dans la ressource.

Oui, exactement, j'ai déjà répondu en ps au post précédent, lorsque vous l'avez écrit :) En d'autres termes, nous ne travaillons pas avec de longues copies et conversions, mais avec un mappage exact.

 
En bref, chaque fois qu'un paramètre utilisateur est modifié, la valeur doit être convertie en valeur d'une variable unitaire et immédiatement sauvegardée dans un tableau commun d'octets, qui peut ensuite être converti en uint et écrit dans une ressource.
 
Vasiliy Sokolov:

Oui, exactement, j'ai déjà répondu dans le ps au post précédent lorsque vous avez écrit ceci :) En d'autres termes, nous ne travaillons pas avec de longues copies et conversions, mais avec un mappage exact.

OK, mais qu'en est-il des textes ?

Ils doivent être convertis en octets viaStringToChar(). Tu ne peux pas utiliser le syndicat, n'est-ce pas ?