代码之家  ›  专栏  ›  技术社区  ›  Corith Malin

读取已保存笔记的FILEOBJECTs

  •  0
  • Corith Malin  · 技术社区  · 13 年前

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

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

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

    因此,当我从头开始创建一个Note时,我觉得加载这些字段与打开已经创建的字段不同。即使在已经创建的Notes中阅读,我自己创建的代码也会给我同样的错误,所以我认为我创建Notes是正确的。

    我已经探索了NSFNoteOpenExt的标志选项,并尝试使用open_xxx中描述的每一个可能的标志打开Note,除了使用open_ABSTRACT或open_NOOBJECTS打开Note时,我总是会感到恐慌。不过,它们不会出错的原因是,它们打开Note时根本没有$FILE字段,所以当我看到该字段是否存在时,我会得到一个false,并且要在TYPE_OBJECT字段中读取的代码永远不会执行。

    你知道我错过了什么吗?

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

    • 克雷格
    1 回复  |  直到 13 年前
        1
  •  0
  •   Corith Malin    13 年前

    我解决了这个问题。这是因为在C#中使用interop时,不能调用C宏。 OSLockBlock 被定义为宏到另一个宏到函数。本质上,它锁定 BlockId.Pool 指针,然后将指针递增 BlockId.BlockHandle .我把那个宏观逻辑误解为第一个增量 区块ID池 通过 块ID。块句柄 ,然后锁定。

    本质上:

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

    有趣的是,后者在创建带有新附件的新笔记时会起作用。我终于明白了, 块ID。块句柄 做那件事的时候总是零。所以这就是为什么它总是有效的。