忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

IronSchemeでWPFは使えない??

04/21/2012 訂正:自己解決しました
有益なコメントも頂きました
詳しくはこちら


.netな動的言語については詳しくないのですが
(というかほとんど全然知らないのですが)、
複数のサイトによると(Dynamically Compiling C#IronPythonの特徴
IronPythonは属性をどうも使えないらしいです。

で、どうやらその理由が動的言語であることに由来するらしいのです。
本当かは判断できませんが・・・。

とすると、もしかしてIronSchemeでも属性が使えないのでしょうか?
ぱっと見たところ、属性を付与する命令というか方法はないように見えます(一日中調べました)。

属性が使えないことの何が嫌かというと、もちろん
(上で引用した記事にも書いてあるように)
WCFが上手く使えないということもあるのでしょうが、
WPFも使えないのではないかということです。
ウィンドウを表示してワイワイ賑やかになれないということです。

WPFはSTAThreadで動きます。
なのでMainメソッドにSTAThread属性を与えてやらなければ
InvalidOperationExceptionをスローして強制終了です。
そして動的言語では属性を与えられない(のでしょうか?)。
つまり動的言語は全てWPFを使えないことになってしまうのでしょうか?
(いやでも、ググるとIronPythonでWPFを使っている例が見つかりますね。あれ・・・??)

ちなみに、こんなコードを書いてクラッシュしました:
(import (rnrs) (ironscheme clr))

(clr-reference PresentationFramework)
(clr-reference PresentationCore)
(clr-reference System.Xaml)
(clr-reference WindowsBase)

(clr-using System.Windows)

;[System.STAThread] might be needed.

(define app (clr-new Application))
(clr-call Application Run app (clr-new Window))

で、こちらがエラーです:
Unhandled CLR exception during evaluation:
CLR Exception: System.InvalidOperationException
System.InvalidOperationException: The calling thread must be STA, because many U
I components require this.
   at System.Windows.Input.InputManager..ctor()
   at System.Windows.Input.InputManager.GetCurrentInputManagerImpl()
   at System.Windows.Input.KeyboardNavigation..ctor()
   at System.Windows.FrameworkElement.EnsureFrameworkServices()
   at System.Windows.FrameworkElement..ctor()
   at System.Windows.Controls.Control..ctor()
   at System.Windows.Window..ctor()
   at eval-core(003).$2()
   at #.psyntax.expander::compile-r6rs-top-level#anon#1#2$2505(CodeContext $cont
ext)
   at #.ironscheme.exceptions::dynamic-wind(Object in, Object proc, Object out)
   at #.psyntax.main::load-port#1$2552(CodeContext $context)
   at #.ironscheme.exceptions::dynamic-wind(Object in, Object proc, Object out)
   at IronScheme.Runtime.Builtins.CallWithCurrentContinuation(Object fc1)
   at IronScheme.Runtime.R6RS.Exceptions.WithClrExceptionHandler(Object handler,
 Object thunk)


どなたかご存じの方に教えていただきたいです!

04/21/2012 訂正 : 自己解決しました
有益なコメントも頂きました
詳しくはこちら

拍手[0回]

PR