gpt4 book ai didi

c - 读取已保存笔记的 FILEOBJECT

转载 作者:行者123 更新时间:2023-11-30 17:58:34 24 4
gpt4 key购买 nike

我参与使用 C API 与 Lotus Notes 和 Lotus Domino 交互。我在阅读 NSF 现有注释时遇到了问题。具体来说,读取 TYPE_OBJECT 字段,更具体地说,读取 $FILE 字段(尽管我确信如果有其他字段,所有 TYPE_OBJECT 字段都会失败)。

我正在使用 NSFItemInfo 获取 $FILE 字段上的摘要数据(因此我不需要保存的文件,我需要有关它的信息,例如其大小、名称等...)。

如果我在内存中创建注释,提交它,然后读取 $FILE 字段,一切正常。如果我将单元测试更改为读取现有的 Note(而不是在内存中创建它),Lotus PANICS 将显示 Invalid Handle Lookup 消息。

所以我感觉当我从头开始创建注释时加载这些字段与打开已经创建的注释时有一些不同。即使阅读已经创建的注释,我自己创建的代码也会给我带来同样的错误,所以我认为我正确地创建了注释。

我探索了 NSFNoteOpenExt 的标志选项,并尝试使用 OPEN_xxx 中描述的每个可能的标志打开注释,但我总是遇到 panic ,除非我使用 OPEN_ABSTRACT 或 OPEN_NOOBJECTS 打开注释。但这些不会出错的原因是因为它们打开的注释根本没有 $FILE 字段,所以当我查看该字段是否存在时,我得到一个错误,并且在 TYPE_OBJECT 字段中读取的代码永远不会执行。

我缺少什么想法吗?

我会提供代码,但我实际上使用 .NET 互操作来完成这一切,并且代码分布在多个文件中,等等......如果您有任何问题,请询问,我将提供为尽可能详细。

  • 克雷格

最佳答案

我发现了这个问题。这是因为在 C# 中使用互操作时,无法调用 C 宏。 OSLockBlock 被定义为函数的另一个宏的宏。本质上,它锁定 BlockId.Pool 指针,然后将指针递增 BlockId.BlockHandle。我错误地将宏逻辑解释为首先将 BlockId.Pool 增加 BlockId.BlockHandle,然后锁定。

本质上:

Lock(BlockId.Pool)+BlockId.BlockHandle Vs Lock(BlockId.Pool+BlockId.BlockHandle)

有趣的是,后者在创建带有新附件的新笔记时可以工作。我最终也发现,这样做时 BlockId.BlockHandle 始终为零。这就是为什么它总是有效的原因。

关于c - 读取已保存笔记的 FILEOBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12110016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com