2008/04/02

Recent entries from same category

  1. COMプログラミング
  2. おそろしや、おそろしや...(JavaでByRef?)

ただいま、JavaとCOMを使ったお仕事をしているんですが、どうも正常に動かないものがありまして、困っておりました。

どんな現象かといいますと、Microsoft AgentをAgentObjectsから起動した時に、ConnectedというBOOL型のプロパティをTRUEに設定してやるのですが、どうやらJavaから渡していた値trueが、VARIANT変換により1になっていた事が原因していました。

まぁ、1だしfalseじゃないなら動作するのが一般的なアプリでしょ...と思ってましたが、どっこいMSAgent殿は例外も出さずにConnectedをFALSEに設定して下さいました。

実際、COM上ではBOOLはVARIANT_TRUEもしくはVARIANT_FALSEを設定するのがお決まりで、VARIANT_TRUEは ((VARIANT_BOOL)0xffff)
と宣言されていました。C++上でのtrueとは値が異なる訳です。

まぁ、それは自分のミスとして...

きっとMSAgentのConnectedプロパティ処理では
if (VARIANT_TRUE == arg) {
  // Connected 設定時の処理...
}
というコードが書かれているのだと思うのですが、これは if (VARIANT_FALSE != arg) {
  // Connected 設定時の処理...
}
って書くべきなんじゃないかな...

ちなみに、Visual Studioのウォッチエリアに追加した、1の値を持つ問題のVARIANT変数は、VT_BOOL:Trueと表示されていました。
Posted at by | Edit