Mi enfoque. El núcleo es el motor. - página 98

 
Como consejo sobre cómo hacer esto, mira la estructura de un archivo zip. Consta de estructuras y datos sencillos. Una estructura similar podría ser estupenda para la transferencia de datos. Tenga en cuenta que no hay ni una sola línea en el archivo zip, lo que no impide que muestre perfectamente un sistema de archivos en miniatura con cientos de archivos con nombres diferentes.
 
Vasiliy Sokolov:
Como pista de cómo hacerlo, mira la estructura de los archivos zip. Consta de estructuras y datos sencillos. Una estructura similar podría funcionar bien para la transferencia de datos. Tenga en cuenta que no hay ni una sola línea en el archivo zip, lo que no impide que muestre perfectamente un sistema de archivos en miniatura con cientos de archivos con nombres diferentes.

Estoy de acuerdo con su visión profesional de la tarea. La transferencia de bytes parece más seria que la transferencia de cadenas mediante objetos MT.

La cuestión es la viabilidad de su aplicación.

El tamaño y los tipos de datos que se van a transferir no se conocen de antemano. ¿Cómo aplicarlo?

 
Реter Konow:

Estoy de acuerdo con su visión profesional de la tarea. La transferencia de bytes parece más seria que la transferencia de cadenas mediante objetos MT.

La cuestión es la viabilidad de su aplicación.

El tamaño y los tipos de datos que se van a transferir no se conocen de antemano. ¿Cómo aplicar la unión?

Es posible.

Por favor, estudie detalladamente la estructura de su cremallera. Llegará un entendimiento. No se conoce el tamaño de los archivos empaquetados antes del empaquetado. Los nombres de los archivos pueden ser de diferente longitud. El número de archivos también puede ser muy diferente. En cualquier caso, el zip representa un conjunto estrictamente tipificado de estructuras finitas que hacen referencia a los datos.

Cuando sepas con qué estructuras tienes que trabajar, no tendrás ningún problema con la unión, porque la unión es sólo una representación de esas estructuras como bytes.

 
Vasiliy Sokolov:

Es posible.

Estudia la estructura de la cremallera en detalle. Llegará un entendimiento. Allí se desconoce el tamaño de los archivos empaquetados antes del empaquetado. Los nombres de los archivos pueden tener muchas longitudes diferentes. El número de archivos también puede ser muy diferente. En cualquier caso, el zip representa un conjunto estrictamente tipificado de estructuras finitas que hacen referencia a los datos.

Cuando sepas con qué estructuras necesitas trabajar, no tendrás ningún problema porque puedes representar simplemente estas estructuras como bytes.

De acuerdo, pero ¿por qué no prescindir de un sindicato, por ejemplo?

En cada evento, el EA recoge una cadena de mensajes, que incluye todos los parámetros modificados y sus valores de todos los tipos. A continuación, convertimos esta cadena en una matriz de bytes utilizando StringToChar, y la escribimos en un recurso. Luego, hacemos el desembalaje inverso.

Inicialmente, había imaginado una solución de este tipo con el recurso. Pero, necesita ensamblar y dividir la cadena.

 
De todos modos, no puede prescindir de un recurso en su solución. Así que la pregunta es cómo evitar el análisis de la cadena. Crees que es posible. Sinceramente, lo dudo. Pero no lo descartaría...
 
Реter Konow:

De acuerdo, pero por qué no prescindir del sindicato, por ejemplo.

En cada evento, el EA recoge una cadena de mensajes que incluye todos los parámetros modificados y sus valores de todos los tipos. A continuación, convertimos esta cadena en una matriz de bytes utilizando StringToChar, y la escribimos en un recurso. Luego, hacemos el desembalaje inverso.

Inicialmente, había imaginado una solución de este tipo con el recurso. Pero, necesita el montaje y la división de la cadena.

La unión es una representación simultánea de estructuras como bytes o int, que es lo mismo. La unión parece proyectar estructuras en una matriz de bytes mientras que la matriz de bytes es simultáneamente un conjunto de estructuras. Si el recurso es un array de int, no es necesario realizar el procedimiento adicional de convertir un array de bytes en un array de estructuras y la operación inversa. Esto ahorra tiempo.

p.d. Con este esquema, el origen del mensaje no copia los datos en el recurso, sino que los cambia directamente, y estos cambios aparecen en el recurso de una vez. Así, en lugar de interminables conversiones de cadenas a arrays, y de arrays a cadenas con el consiguiente análisis sintáctico, se trabaja con los datos directamente. Estos datos se copian sólo a los destinatarios que utilizan ResourceReadImage.

 
Vasiliy Sokolov:

La unión es una representación simultánea de estructuras como bytes o int, que es lo mismo. El tipo de unión proyecta estructuras en una matriz de bytes, y la matriz de bytes es simultáneamente un conjunto de estructuras. Si el recurso es un array de int, no es necesario realizar el procedimiento adicional de convertir un array de bytes en un array de estructuras y la operación inversa. Ahorra tiempo.

Tendré que pensarlo... Tal vez tengas razón y sea posible implementarlo con la unión.

Por ejemplo, si cada ajuste del valor de un parámetro, convirtiera ese valor en un array de bytes. Más concretamente, todos los parámetros del usuario, deben pertenecer a la unión. Entonces, su copia reflejada en bytes estará inmediatamente disponible para escribir en el recurso.

 
Реter Konow:

Por ejemplo, si cada ajuste de un valor de parámetro, convertirá ese valor en un array de bytes. Más concretamente, todos los parámetros del usuario deben pertenecer a la unión. Entonces, su copia reflejada en bytes estaría inmediatamente disponible para escribir en el recurso.

Sí, exactamente, ya respondí en ps al post anterior, cuando lo escribiste :) Es decir, no estamos trabajando con copias y conversiones largas, sino exactamente con mapeos.

 
En resumen, cada vez que se cambia el valor de un parámetro de usuario, el valor debe convertirse en el valor de una variable de unidad y guardarse inmediatamente en una matriz de bytes común, que luego puede convertirse en uint y escribirse en un recurso.
 
Vasiliy Sokolov:

Sí, exactamente, ya respondí en el ps al post anterior cuando escribiste esto:) Es decir, no estamos trabajando con copias y conversiones largas, sino exactamente con mapeos.

De acuerdo, pero ¿qué pasa con los textos?

Deben ser convertidos a bytes medianteStringToChar(). No puedes usar la unión, ¿verdad?