Я знаю, что этот поток старый, но я много работал с Domino API и типичными объектами Notes LotusScript через Domino COM API.
Проблема с Domino API заключается в том, что его управление памятью через COM ужасно (при использовании API в C # или VB и т. Д.), И это приведет к утечкам памяти и в конечном итоге приведет к тому, что весь API и клиент Notes будут сбой (даже если у вас не открыт клиент, вы не сможете запустить его после сбоя API, не перезагружая компьютер или не вызывая «nsd -kill»). Fun.
Я обнаружил, что используя Notes C API в C # через P / Invoke, вы можете лучше управлять ресурсами памяти, чтобы API не вызывало ужасных утечек памяти и сбоев. Я написал частичную оболочку на C #, используя P / Invoke, которая обращается к API Notes C из файла notes.dll. Мое использование этого не имеет ничего общего с попыткой работы в среде Domino, но использует сборку Notes для доступа к файлам NSF для извлечения информации DXL в среде C #. Очевидно, вам потребуется установить клиент Notes, чтобы иметь доступ к notes.dll и C API. Но моя оболочка C # для Notes C API прекрасно работает и более стабильна, чем Domino COM API, которая предоставляется при установке клиента Notes.
Классы, которые я реализовал в C # (которые мне только нужны) из Notes C API:
NotesSession (как NotesRuntime)
NotesDatabase
NotesNote
NotesItem
NotesDXLExporter
NotesNoteCollection
А также некоторые другие промежуточные классы, перечисления и структуры для обработки перевода из C API в C #.
Классы, которые я реализовал до настоящего времени, служили целям, которые мне были нужны из Notes C API. Их определенно можно расширить, но я не пытался инкапсулировать весь API в оболочку C # P / Invoke. Мне также пришлось создать обработчики для работы со встроенными объектами OLE, которые могут храниться в документах Notes, и извлечения хранимых данных из этих объектов OLE с помощью объектов Windows IStorage.
Примечание: я могу предоставить некоторые примеры позже (я должен переименовать пространства имен и обобщить код из-за проприетарных причин), но я создал классы-оболочки C # с помощью «Lotus C API Notes / Domino 8.5.2 Reference» NSF, предоставляемый IBM / Lotus (в виде загружаемого NSF). Используя определения C и ссылки на классы, я мог бы перевести их в вызовы C # P / Invoke и обернуть их в более удобные классы C #, которые затем вели себя как вызовы классов LotusScript, но внутри C #, а реализованные классы управляли и распоряжались своей памятью так, что все это не падает после того, как вы получили доступ к сотням тысяч документов из программы на C #. :)