Если я правильно помню - и моя память об этом немного размыта, прошло много времени с тех пор, как я разбирал Excel PIA - это так.
Событие - это, по сути, метод, который объект вызывает, когда что-то происходит. В .NET события являются делегатами, простыми и понятными. Но в COM очень часто можно организовать целую кучу обратных вызовов событий в интерфейсах. Таким образом, у вас есть два интерфейса для данного объекта - «входящий» интерфейс, методы, которые вы ожидаете, что другие люди будут вызывать вас, и «исходящий» интерфейс, методы, которые вы ожидаете вызывать для других людей, когда происходят события.
В неуправляемых метаданных - библиотеке типов - для создаваемого объекта есть определения для трех вещей: входящий интерфейс, исходящий интерфейс и кокласс, который говорит: «Я - создаваемый объект, который реализует этот входящий интерфейс и этот исходящий интерфейс ".
Теперь, когда библиотека типов автоматически переводится в метаданные, эти отношения, к сожалению, сохраняются. Было бы лучше иметь созданную вручную PIA, которая бы соответствовала классам и интерфейсам в большей степени, чем мы ожидали в управляемом мире, но, к сожалению, этого не произошло. Поэтому в Office PIA полно этих, казалось бы, странных дубликатов, где каждый создаваемый объект, похоже, имеет два интерфейса, связанных с ним, с одинаковыми элементами на них. Один из интерфейсов представляет интерфейс к коклассу, а один из них представляет входящий интерфейс к этому коклассу.
Интерфейс _Workbook является входящим интерфейсом в классе рабочих книг. Интерфейс Workbook - это интерфейс, который представляет сам Coclass и, следовательно, наследуется от _Workbook.
Короче говоря, я бы использовал Workbook, если вы можете сделать это удобно; _Workbook - это немного деталей реализации.