<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx</link><description>Visual Studio 2010ベータ1のウォークスルーの中に Office プログラマビリティ があります。このウォークスルーの中で、1か所だけ 動的呼び出しになると記述されたところがあります。この個所を、このウォークスルーではNo PIA(埋め込みPIA)というシナリオを確認するために、最終的には、キャストします。なぜキャストするかといえば、埋め込みPIAでは必要な型情報のみを取り込むからだと説明されています。この内容は、さておきNo PIAにしないコードの抜粋を以下に引用します。 public</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>DLR ???????????? Excel ????????????????????? | ASP NET Hosting</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9683578</link><pubDate>Tue, 02 Jun 2009 08:20:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9683578</guid><dc:creator>DLR ???????????? Excel ????????????????????? | ASP NET Hosting</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://asp-net-hosting.simplynetdev.com/dlr-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f-excel-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/"&gt;http://asp-net-hosting.simplynetdev.com/dlr-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f-excel-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>re: DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9688435</link><pubDate>Wed, 03 Jun 2009 03:50:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9688435</guid><dc:creator>hidori</dc:creator><description>&lt;p&gt;こんにちは、ご無沙汰しています。&lt;/p&gt;
&lt;p&gt;dynamic キーワード（DynamicObject) はすごく便利だと思うんですが、COM オブジェクトのリリースまでは面倒見てくれないですよね？&lt;/p&gt;
&lt;p&gt;DynamicObject が、自分自身がカプセルしているブツが COM オブジェクトだと理解しているとしても、それを解放するべき適切なタイミングを知ることができないような気がしているんですが…実際のところはどうなんでしょう？&lt;/p&gt;</description></item><item><title>re: DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9688469</link><pubDate>Wed, 03 Jun 2009 04:02:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9688469</guid><dc:creator>shozoa</dc:creator><description>&lt;P&gt;ご指摘の通りです。&lt;/P&gt;
&lt;P&gt;GCで解放してやるしかないと思います。現在のベータでどうかは試していませんが、WORDとEXCELでも挙動が異なります(厳密には、COMサーバーの作りに依存しているように私には思えます)。この意味では、dynamicキーワード(実態は属性)を持ったobjectが、参照を失うことでGCが回収するでしょう。&lt;/P&gt;</description></item><item><title>re: DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9726461</link><pubDate>Thu, 11 Jun 2009 15:14:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9726461</guid><dc:creator>hidori</dc:creator><description>&lt;p&gt;＞GCで解放してやるしかないと思います&lt;/p&gt;
&lt;p&gt;GC 任せに出来ない場面も、現実世界には多々あります。&lt;/p&gt;
&lt;p&gt;なので、dynamic キーワードを使っていても、明示的に COM の参照を解除する方法はどうしても必要です。&lt;/p&gt;
&lt;p&gt;dynamic キーワード関連のヘルプトピックをざっと見てみましたが、記法や利点について述べたものばかりで、「COM 参照の解放はプログラマの責任」であることについて言及されたものは見つけられませんでした。&lt;/p&gt;
&lt;p&gt;これは技術情報として明確にどこかで説明されるべきだ事項だと思います。&lt;/p&gt;
&lt;p&gt;一応、VS2010Beta1 では、COM サーバをカプセルする dynamic な変数に Marshal.ReleaseComObject() すると IUnknown.Release() が呼び出されているようですが、これが保障された動作であるのかどうかも分りません。&lt;/p&gt;</description></item><item><title>re: DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9728294</link><pubDate>Fri, 12 Jun 2009 03:00:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9728294</guid><dc:creator>shozoa</dc:creator><description>&lt;p&gt;&amp;gt;明確にどこかで説明されるべきだ事項だと思います&lt;/p&gt;
&lt;p&gt;それは、その通りだと思います。&lt;/p&gt;
&lt;p&gt;ソースコードの ComRuntimeHelper.csのIUnknownReleaseDelegateのサマリーには、間接的にvTableの関数ポインタを呼び出すコードを出力している。このアプローチは、Marshal.Release向けの900ものコードよりも300の命令になるし、JITがP/Invokeスタブのインライン化とP/Invokeのターゲットを直接呼び出すようになると書かれています。&lt;/p&gt;
&lt;p&gt;これよりもIUnknownReleaseDelegateというデリゲートのネーミングからも推測できるように、IUnknownをリリースする仕組みを組み込んでいるので、説明が書かれていないのかも知れません。&lt;/p&gt;
&lt;p&gt;&amp;gt;dynamic な変数に Marshal.ReleaseComObject() &lt;/p&gt;
&lt;p&gt;CLRでは、COMオブジェクトのインスタンスはRCWのスタブで必ず包まれます。ですから、保障された動きであると考えています。もしろdynamicという属性は、振る舞いをDLRのバインダーにお任せするというものであって、メソッドやメンバーの呼び出し方法が直接的にマネージ・ポインタを使うのではなく、名前でMehodInfo(マネージポインタ)を取得してからInvokeするという仕組みに変わるだけだと理解しています。&lt;/p&gt;
</description></item><item><title>re: DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9747017</link><pubDate>Sun, 14 Jun 2009 04:51:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9747017</guid><dc:creator>hidori</dc:creator><description>&lt;p&gt;IUnknownReleaseDelegate は Microsoft.Scripting.dll に含まれた定義のようですね。&lt;/p&gt;
&lt;p&gt;Microsoft.Scripting.dll は、.NET Framework 4.0 Beta1 には含まれておらず、別途 CodePlex で配布されるようです。&lt;/p&gt;
&lt;p&gt;なので、IUnknownReleaseDelegate は、Microsoft.Scripting.dll がスクリプト言語実装に対して提供するサービス内で使用されるモノのような気がします。&lt;/p&gt;
&lt;p&gt;なので、.NET Framework 4.0 環境で dynamic キーワードを使用してプログラムを書くだけでは、IUnknownReleaseDelegate の恩恵は受けられないような…&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt;dynamic な変数に Marshal.ReleaseComObject() &lt;/p&gt;
&lt;p&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;gt;CLRでは、COMオブジェクトのインスタンスはRCWのスタブで必ず包まれます。ですから、保障された動きであると考えています。&lt;/p&gt;
&lt;p&gt;なるほど。そうですね。&lt;/p&gt;
&lt;p&gt;遅延バインドによるメンバ呼び出しを陰でサポートしてくれるだけで、扱っているオブジェクトそのものは今まで通り 、ってことなので、その動作もこれまで通りということになりますね。&lt;/p&gt;
&lt;p&gt;ちょっと安心しましたｗ&lt;/p&gt;</description></item><item><title>re: DLR を使った Excel プログラミング</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9748839</link><pubDate>Sun, 14 Jun 2009 10:50:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9748839</guid><dc:creator>shozoa</dc:creator><description>&lt;p&gt;hidoriさん、有難うございます。&lt;/p&gt;
&lt;p&gt;&amp;gt;IUnknownReleaseDelegate は Microsoft.Scripting.dll に含まれた定義のようですね&lt;/p&gt;
&lt;p&gt;DLR 0.91のソースコードを見ると Microsoft.Dynamicに含まれています。.NET Framework 4.0Beta1よりも開発が進んでいますので、最終的にはSystem.Dynamicネームスペースに入るのではないかと考えています。&lt;/p&gt;
&lt;p&gt;まだ開発途中なので何とも言えませんが、codeplexのDLRが開発が進んだものであることは間違いありませんので、Beta2で入っていれば、その恩恵がdynamicキーワードでも受けられるのじゃないでしょうか。&lt;/p&gt;
&lt;p&gt;#複数バージョンのソース(IronPython、IronRuby、DLR)を見ていると、みるバージョンによってかなり異なっていくので、なるべく最新を見るようにしています。&lt;/p&gt;
</description></item><item><title>DLR の COM バインダーに対する考察</title><link>http://blogs.msdn.com/shozoa/archive/2009/06/02/office-programmability-by-dlr.aspx#9751910</link><pubDate>Mon, 15 Jun 2009 05:45:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9751910</guid><dc:creator>荒井省三のBlog</dc:creator><description>&lt;p&gt;DLRを使ったExcelプログラミング というエントリーで、興味深いご指摘をいただきました。それは、 COMオブジェクトのリリースを誰が面倒を見てくれるのか というものです。この問題を考える上で意識しないといけないのが、オブジェクトのライフサイクルの管理という側面です。具体的には、以下のようなものです。&lt;/p&gt;
</description></item></channel></rss>