お世話になります。舘石と申します。

win32oleで、複数の[out]引数に、BSTRを渡して、
WIN32OLE::ARGVで取得しようとすると、
一番最後の引数しか取得することができません。

HRESULT GetStatus([out] VARIANT* p1,
                  [out] VARIANT* p2,
                  [out] VARIANT* p3,
                  [out,retval] VARIANT* retval)
{
  *p1 = _variant_t("aaa");
  *p2 = _variant_t("bbb");
  *p3 = _variant_t("ccc");
  *retval = _variant_t(true);
  return S_OK;
}

とした時に、

hoge = WIN32OLE.new("〜")
hoge.getStatus("","","")
printf ("%s %s %s",
        WIN32OLE::ARGV[0],
        WIN32OLE::ARGV[1],
        WIN32OLE::ARGV[2]) # "ccc ccc ccc" になってしまう

文字列ではなく、

*p1 = _variant_t(0);
*p2 = _variant_t(1);
*p3 = _variant_t(2);

とすると、

printf ("%d %d %d",
        WIN32OLE::ARGV[0],
        WIN32OLE::ARGV[1],
        WIN32OLE::ARGV[2]) # ちゃんと "0 1 2" となる

なにか私の使い方がまずいのでしょうか…
どなたか、ご教授願います。