Tengo una definición de enumeración en un módulo (A), p. SUCCESS = 0, INVALID_REQ = 1 etc. Luego tengo otro dll (módulo B) que tiene su propio conjunto de estado enum. Una vez que agreguemos un nuevo valor enum en A, tenemos que agregarlo manualmente a B ya que A está en .NET y B es código C. Además, enum en A es solo parte de la enumeración de estado en B (B tiene su propio estado interno además del estado de A). Esto parece un acoplamiento muy apretado entre estos dos módulos. Alguna sugerencia para hacerlos menos acoplados? ¡Thx!Conversión de Enum entre los módulos
Respuesta
¿Por qué no escribir una secuencia de comandos simple que genera estas enumeraciones basadas en un archivo durante la compilación? Si realmente quieres desacoplarlos, necesitarás convertir a alguien en un maestro y exponer su contenido al otro lado. Probablemente usando RCW ..
* tos * COM IDL? * tos * –
:) Ese no es el fin del mundo para escribir ... :) – gbvb
Lo que sería divertido sería utilizar la reflexión aquí. Escriba un pequeño programa que lea la enumeración por reflexión del módulo A, y genere un archivo .h para usar en el módulo c.
- 1. C# cadena de conversión explícita a ENUM
- 2. cadena genérico para ENUM conversión
- 3. Conversión implícita entre los tipos de datos
- 4. Conversión entre enumeraciones en C#
- 5. Compartiendo memoria entre módulos
- 6. C# enum para enhebrar auto-conversión?
- 7. cadena a la conversión enum en C#
- 8. cómo compartir un archivo de filtro entre los módulos maven2?
- 9. ¿Comunicación entre módulos con Prism?
- 10. Pasar objetos STL y/o MFC entre los módulos
- 11. Diferencia entre los módulos Python datetime vs time
- 12. Conversión implícita entre los tipos de colección de Scala
- 13. Diferencia entre conversión, análisis y conversión
- 14. Diferencia entre los métodos de conversión/fundición en C#
- 15. QFlags Enum Tipo de conversión falla de repente
- 16. la conversión de un entero a Enum en PostgreSQL
- 17. ¿Por qué necesitamos conversión de tipo enum en C#
- 18. Validar la conversión exitosa de String to enum en Java
- 19. Diferencia de Enum entre Java y C++?
- 20. Dependencias de los archivos de encabezado entre los módulos de C++
- 21. Paquetes "dentro" de los módulos
- 22. Operador de conversión de sobrecarga entre dos enumeraciones
- 23. ¿Los módulos pueden tener propiedades?
- 24. PyroCMS: ¿cómo compartir recursos entre módulos?
- 25. Cadena de conversión a type-safe-enum utilizando la conversión definida por el usuario
- 26. ¿Compartir paquetes Java entre módulos en IntelliJ?
- 27. ¿Cómo compartir la misma variable entre módulos?
- 28. Diferencia entre módulos y extensión en Yii
- 29. Conversión entre tipos en Haskell
- 30. ¿Diferencia entre módulos y bibliotecas compartidas?
El mayor problema aquí no es mantener los dos sincronizados (aunque eso es un problema), sino más bien el hecho de que la enumeración en B significa algo diferente a la enumeración en A. Ahora abre la posibilidad de querer agregue un nuevo elemento a A, pero de repente entra en conflicto con un valor interno que utiliza B. Si necesita duplicar valores con el propósito de la interoperabilidad, úselo _only_ para la interoperabilidad y administre el estado interno por separado. –
Hay un * contrato implícito * pasando aquí. Imagine HTTP2 agrega un nuevo verbo decir, [JABBERWOCKY] (http://www.jabberwocky.com/carroll/jabber/jabberwocky.html). Todos los clientes/servidores HTTP2 necesitarían estar codificados con conocimiento de este contrato. El uso de versiones explícitas de [protocolo], tal vez con protecciones y [compatibilidad hacia abajo] (http://en.wikipedia.org/wiki/Backward_compatibility), puede ser útil para detectar y/o mitigar los desajustes. Existen herramientas para ayudar a compartir información de contrato: imagine [COM IDLs] (http://en.wikipedia.org/wiki/Component_Object_Model) u otros generadores de andamios. –
@Dan: estoy pensando en usar valores enum en A como es y definir const en B comenzando desde 100 (0-99 desde A). Luego usa enteros en lugar de enum como la interfaz de B. Tanto el estado de A como el de B pueden exponerse desde la interfaz de B y no preocuparse de que A y B se interfieran entre sí. – Icerman