Неуправляемые C ++ и C # живут в двух разных мирах, поэтому нет никакого способа использовать одно и то же перечисление, не превратив DLL-библиотеку c ++ в управляемую.
И даже тогда вам, вероятно, потребуется дублирование в управляемой C ++ DLL.
Перечисление C ++ очень похоже на список констант, тогда как перечисление C # наследует класс Enum и, таким образом, предоставляет немало «хитростей». Итак, как вы можете видеть, они очень разные.
Если не имеет значения, является ли нативная C ++ DLL нативной или управляемой, я бы превратил ее в управляемую и обернул нативные вызовы в управляемый слой C ++.
Таким образом, вы можете создать дубликат enum внутри C ++ DLL, а также избавиться от всех взаимодействий одновременно: -)