我知道这个线程很旧,但我已经通过 Domino COM API 使用 Domino API 和典型的 Notes LotusScript 对象做了很多工作。
Domino API 的问题在于它通过 COM 进行的内存管理很糟糕(如果在 C# 或 VB 等中使用 API),它会导致内存泄漏并最终导致整个 API 和 Notes 客户端崩溃(甚至如果您没有打开客户端,您将无法在 API 崩溃后启动它,而无需重新启动计算机或调用“nsd -kill”)。乐趣。
我发现通过 P/Invoke 在 C# 中使用 Notes C API,您可以更好地管理内存资源,以便 API 不会导致可怕的内存泄漏和崩溃。我使用 P/Invoke 在 C# 中编写了一个部分包装器,它从 notes.dll 访问 Notes C API。我对它的使用与尝试在 Domino 环境中工作无关,而是利用 Notes 程序集访问 NSF 文件以在 C# 环境中提取 DXL 信息。显然,您需要安装 Notes 客户端才能访问 notes.dll 和 C API。但是我的 Notes C API 的 C# 包装器运行良好,并且比安装 Notes 客户端时提供的 Domino COM API 更稳定。
我在 Notes C API 中用 C#(我只需要)实现的类是:
NotesSession(作为 NotesRuntime) NotesDatabase NotesNote NotesItem NotesDXLExporter NotesNoteCollection
以及其他一些临时类、枚举和结构来处理从 C API 到 C# 的转换。
到目前为止,我实现的类已经满足了我从 Notes C API 中需要的目的。它们绝对可以扩展,但我没有尝试将整个 API 封装在 C# P/Invoke 包装器中。我还必须创建处理程序来处理可能存储在 Notes 文档中的 OLE 嵌入对象,并使用 Windows IStorage 对象从这些 OLE 对象中获取存储的数据。
注意:我可以稍后提供一些示例(由于专有原因,我必须重命名命名空间并概括代码),但我使用“Lotus C API Notes/Domino 8.5.2 Reference”NSF 创建了 C# 包装器类,即由 IBM/Lotus 提供(作为可下载的 NSF)。使用 C 定义和类引用,我可以将它们转换为 C# P/Invoke 调用并将它们包装到更友好的 C# 类中,然后它们的行为更像 LotusScript 类调用,但在 C# 中,并且实现的类管理和处置它们的内存,所以从 C# 程序访问数十万个文档后,整个事情不会崩溃。:)