しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Cocoa# と可変引数

Cocoa# のソースコードを読んでいると、Objective-C ランタイムにある objc_msgSend などのメソッドを呼ぶだけなのにややこしいことをしてたので、追っかけてみた。
どうやら objc_msgSend が可変引数を取るので、引数の数や型に合わせた P/Invoke メソッドを個別に作成していることがわかった。この方法だとちゃんと標準マーシャラが動いてくれるので、引数の型のことはあまり考えずに呼び出すことができる。
C# でも __arglist というキモイキーワードを使えば、可変引数を持つ関数の呼び出しは出来るらしいけど、こいつは引数を配列で指定できないとかあまり使い勝手がいいとは言えない。