Silverlight 4 COM Support and 32/64 bit machines ? the C64 Emulator より。
以前に Commodore 64 エミュレータを Silverlight で作ってる 方の記事を紹介しましたが、その方のその後です。
ジョイスティックなんかをエミュレートするためにタッチ・インターフェースでできるようにしようとしたとのこと。
このために Windows API Code Pack を使って (おそらく C# で) DLL を作り、これを regasm で COM として登録。そして、Silverlight 4 の COM 呼び出しを使ってこの COM を呼び出すようにしたようです。
(Silverlight から直接 API を呼び出すことはできないため、COM 経由で呼ぶようにしたということですね)
で、パフォーマンスも問題ないしうまくいったと。
が、Silverlight の PM の一人である Ashish Shetty 氏にこのことを話したところ驚かれたようです。こういうシナリオはサポートされてない、と。
太字で強調されてますが、COM 呼び出しはローカルマシンにインストールされているアウトオブプロセスな COM サービスに使うことが前提になっていると。
PDC でこのデモを動かしてやろうとしたけどデモ機が Windows 7 64bit だったので動かなかった、なんてことも書いてありますね。
インプロセスな COM の場合、64bit アプリでは 64bit の COM、32bit アプリでは 32bit の COM しか呼び出すことができないからですね。
って、あれ?
Silverlight 4 の Out of Browser は 64bit OS だと 64bit なの?
いや、そもそも regasm で登録した COM って 32bit なの?64bit なの?(アセンブリは AnyCPU だとして)
気になったので検索してみた、、、
おぉ、
- C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
- C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe
があるのか。
Framework の方で regasm する 32bit COM、Framework64 の方だと 64bit COM になるのね。知らんかった。
ちなみに、アウトプロセスな COM サーバーの場合は間にマーシャリングが入るため違うビット幅の COM サーバーも問題なく呼び出せます。
ちょっと話がそれましたが、インプロセスな COM に使うことを想定してないというのはちょっと意外。
Having fun with Silverlight 4 Beta and the Speech APIs
こちらの人なんて Speech API を呼び出して Out of Browser な Silverlight 4 アプリにしゃべらせたりしてるし。
# Sapi.SpVoice はインプロセスな COM でした。
おまけ
Silverlight 4 で dynamic 使うときは Microsoft.CSharp.dll を参照しないといけないのか。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。