CS架構的winForm與BS架構的webForm是不能直接通信的,那么真的就一點兒辦法都沒了嗎?其實不然。
看了網上很多資料,我總結出有兩種方式可以實現。
1)首先客戶端需要用注冊表寫入協議,通過協議去找已經安裝在客戶端的winForm的exe文件,這時可以給窗體傳入參數,例如 “helloworld://你個豬頭”, helloworld是協議,后面”你個豬頭“是傳入的字符串。當然winForm的main方法寫法也有不同,需要得到參數(也可以不要參數,如果不需傳參,直接調用)
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 frm = new Form1();
if (args.Length > 0)
{
frm.strArgs = args[0];
MessageBox.Show(args[0]);
Application.Run(frm);
}
else
{
Application.Run(new Form1());
}
}
注冊表中指向調用winForm所在的exe文件路徑即可,具體代碼詳見測試案例;當然調用也很簡單 如
<a href="helloworld://你個豬頭"><img border="0" SRC='hello.jpg' alt="測試"></a>
后面附上測試案例。
2)第二種就是調用active插件,也叫ocx插件,需要客戶端注冊一個插件,我們可以新建一個”windows窗體控件庫“來實現,具體方法我也不多講,可以參考:http://hi.baidu.com/dosonet/blog/item/7ced5d929411a2ada877a446.html
簡單說說我當時遇到的困難和特別需要注意的:
a. 在一個”windows窗體控件庫“項目中,可以新建多個用戶控件窗體,但是如果要網頁上正常調用,必須實現IObjectSafety接口,具體實現可以完全ctrl + c, ctrl + v,并且需要指定完全不同的guid值,否則不能正常調用。
b. 不同用戶控件窗體是不能相互調用的,如果要調用不同窗體,直接新建Form就行,然后可以采取用戶控件中彈出Form來實現。詳見我的測試案例。
總結下,其實winForm中實現active插件也不是很難,只是winForm必須基于.NET framework來工作,所以我建議winForm的版本在2.0,不要升級到3.0及其以上,因為安裝在客戶上,2.0只需20M左右,3.0則要幾百M,如果不是必須用C#來實現的話,用C,C++,或者delphi更好……
|
新聞熱點
疑難解答