From: tateishi@... Date: 2005-09-10T19:58:08+09:00 Subject: [ruby-list:41126] Re: win32oleで複数のout引数をARGVで取得できない お世話になります。舘石です。 >>STDMETHODIMP CTestObj1::GetStatus(VARIANT* p1, VARIANT* p2, VARIANT* p3) >>{ > > *p1 = _variant_t("aaa").Detach(); > > とDetach()を使うとどうでしょうか。 > ああ、こうやってやるんですね。やっとわかりました。ありがとうございます。 以前のだと、_variant_tが消えるときに、VariantClearが呼び出されて、 BSTRもSysFreeStringされてしまっていた。 Detachして、VariantClearは呼び出し元にまかせなきゃダメですよね。 もっと勉強しないと(汗) > >>STDMETHODIMP CTestObj1::GetStatus(VARIANT* p1, VARIANT* p2, VARIANT* p3) >>{ >> _variant_t v1("aaa"); >> _variant_t v2("bbb"); >> _variant_t v3("ccc"); >> >> *p1 = v1; >> *p2 = v2; >> *p3 = v3; >> >> return S_OK; >>} >> > こっちもいささかあやしい気がします。 > でも、なぜこっちはちゃんと動くのか不思議です。 呼び出し元がVARIANTを見たときには、すでに 解放されているはずですよね? ふと気づけば、話がぜんぜんRubyじゃなくなってます。。。 失礼しました。