0

私は、CAPIを使用してLotusNotesおよびLotusDominoと対話することに携わっています。NSFから既存のメモを読み取るときに問題が発生します。具体的には、TYPE_OBJECTフィールド、さらに具体的には$ FILEフィールドを読み取ります(ただし、他のフィールドがある場合は、すべてのTYPE_OBJECTフィールドが失敗すると確信しています)。

NSFItemInfoを使用して$FILEフィールドの要約データを取得しています(したがって、保存されたファイルは必要ありません。サイズ、名前などの情報が必要です)。

メモをメモリに作成し、コミットしてから$ FILEフィールドを読み取ると、すべてが機能します。(メモリに作成するのではなく)既存のノートを読み取るように単体テストを変更すると、LotusPANICSに無効なハンドルルックアップメッセージが表示されます。

そのため、ノートを最初から作成する場合と、すでに作成されているノートを開く場合では、これらのフィールドのロードに何か違いがあるように感じます。作成済みのコードを読んでも同じエラーが発生するので、正しく作成していると思います。

NSFNoteOpenExtのフラグオプションを調べ、OPEN_xxxで説明されているすべての可能なフラグを使用してノートを開こうとしましたが、OPEN_ABSTRACTまたはOPEN_NOOBJECTSを使用してノートを開く場合を除いて、常にパニックが発生します。ただし、これらがエラーにならない理由は、$ FILEフィールドなしでNoteを開くためです。そのため、フィールドが存在するかどうかを確認すると、falseが発生し、TYPE_OBJECTフィールドで読み取るコードは実行されません。

私が欠けているアイデアはありますか?

コードを提供しますが、実際には.NET相互運用機能を使用してこれらすべてを実現しており、コードは複数のファイルなどに分散しています。ご不明な点がございましたら、お問い合わせください。詳細をお知らせします。私は出来ます。

  • クレイグ
4

1 に答える 1

0

私はその問題を理解しました。これは、C#で相互運用機能を使用する場合、Cマクロを呼び出すことができないという事実に由来しています。 OSLockBlock関数への別のマクロへのマクロとして定義されます。基本的に、BlockId.Poolポインタをロックしてから、ポインタを。だけインクリメントしますBlockId.BlockHandleBlockId.Pool私はそのマクロロジックを最初にインクリメントしてBlockId.BlockHandleからロックするように誤って解釈していました。

基本的に:

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

後者が新しい添付ファイル付きの新しいメモを作成するときに機能するのは興味深いことです。私はついにそれも理解しました、それをするBlockId.BlockHandleときは常にゼロでした。だからそれはいつもうまくいった理由です。

于 2012-08-24T18:03:54.253 に答える