Я бы обернул его в новый класс C # и предоставил бы только минимальные функциональные возможности вызывающему коду (возможно, через интерфейс). Таким образом, некоторые функции могут быть постепенно переписаны в C #, не затрагивая вызывающего клиента.
И да, используйте interop для создания оболочки, вызываемой во время выполнения.
Вызов кода .NET -> вашей новой оболочки класса .NET -> COM dll через вызываемую во время выполнения оболочку.
Теперь, даже если вы не переопределяете функции или свойства в буквальном смысле ... вы все равно можете выполнить это с помощью класса-оболочки.