У меня есть обертка менеджера для собственной библиотеки - родная библиотека - это C++ с экспортированным интерфейсом C, и я использую P/Invoke на управляемой стороне для достижения взаимодействия , Я контролирую как управляемый, так и собственный код.Методы, позволяющие синхронизировать соответствующие собственные и управляемые перечисления
Там же перечисление в машинный код, который имеет соответствующее перечисление в управляемом коде, что-то вроде этого:
// C#
public enum ErrorCode {
None = 0,
General = 1,
BadThings = 2,
HardDriveWasRemoved = 3,
}
// C++
enum ERROR_CODE {
ERROR_CODE_NONE = 0,
ERROR_CODE_GENERAL = 1,
ERROR_CODE_BAD_THINGS = 2,
ERROR_CODE_HARD_DRIVE_REMOVED = 3,
}
Эти перечислений должны быть синхронизированы, так как значения перечисления передаются назад и вперед между управляемый и собственный код; неправильное сопоставление между ними вызывает тонкие сбои, которые не всегда очевидны.
У кого-нибудь есть умные (но относительно легкие) методы для (a) автоматического сохранения этих перечислений в синхронизации или (б) предоставления предупреждения/ошибки/сбоя как можно раньше, чтобы перечисления не были синхронизировать?
Связанные вопросы с ответами, но ни выбрали в качестве ответа: http://stackoverflow.com/questions/1947576/shared-common-definitions-across-cc-unmanaged-and-managed-c- код –
А, спасибо, я пропустил это в своем первоначальном поиске из-за отсутствия термина «перечисление» в названии, которое я предполагаю. –
Dupe из найденного Erik, а также http://stackoverflow.com/questions/3457646/using-enum-in-c-and-c-via-c-header и http://stackoverflow.com/questions/ 954321/is-it-possible-to-share-an-enum-declaration-between-c-and-unmanaged-c и http://stackoverflow.com/questions/3240263/sharing-an-enum-from-cc- cli-and-c .. и это были только те, которые были найдены при поиске "[C++] [C#] перечисления" –