相変わらず間が空きましたが続きです。
前編でやった方法ですが、変数が返ってくる際に自動で型がキャストされる模様。なので
var data = 123;
はstring型の”123″で返ってくる。
public void Hoge(int value)
でも大丈夫だけど、
var data = ’波平’;
をint型で受けるのはエラーを吐く。
文字列型を数値型で取得できないのであたりまえですが。
ちなみに返ってくる変数が参照渡しの場合はすべて __comobject になってウマくいきません・・・・
配列やオブジェクトはダメということです。
マーシャリングとかでなんとかなるのかもしれないけど、主題の「簡易取得」に反するので却下。
(つーか、わからないダケなんだけど・・・・)
ただし、配列はstring型で受け取るとカンマ区切りで返ってきます。
var data = Array('波平','フネ’);
これを前編のC#のソースで受け取ると、valueの値は
波平,フネ
になる。これをSplitしてあげれば個別に取得しるのも一応可能。
public void Hoge(string values) { foreach (string value in values.Split(',')) { MessageBox.Show(value); } }
ただし、文字列の中にカンマがあるとどこで区切っていいかわからなくなりますw
そんな場合はゴリゴリ書くしかない!
private void button1_Click(object sender, EventArgs e) { string script = @" var temp = Array(); for (var i in data) { temp[i] = encodeURIComponent(data[i]); } window.external.Hoge(temp); "; webBrowser1.Url = new Uri(string.Format(@"javascript:{0}", script)); }
public void Hoge(string value) { foreach (string text in value.Split(',')) { MessageBox.Show(Uri.UnescapeDataString(text)); } }
美しくない・・・w
しかも配列の中身がオブジェクト型だったりすると意味がない。。。