學習C#中調用COM,後期綁定(以及對WinHttp COM對象的C#封裝)

  開始學習C#了,沒打算從語法一點一點的看起!所以上來就直接開始代碼了!同時也和Delphi之間的某些操作進行比較比較!於是想到了一個朋友用Delphi寫的通過ip138查詢手機號碼的例子,他用的是IdHttp來進行提交操作的。我在之前寫飛信的控件的時候,用的http是Windows自己內部的COM庫:WinHttp.WinHttpRequest.5.1,這個玩意用起來還是相當方便的,於是就乘着學習,藉機來在C#中動態創建這個COM對象。要知道在Delphi中創建和調用一個COM對象,那是相當方便的。直接一個CreateOleObject就能創建一個COM對象了,然後COM對象中的方法就能夠直接通過這個東西直接調用。那麼在C#中是否依然如此簡潔?不曉得,是因爲我剛接觸還是咋地,折磨了半天,實在沒摸索到簡單的方法來創建COM對象(當然,那種通過引用添加組件庫到C#環境中去的方法不算,因爲這個方法有一定的弊端,那便是當用戶換了環境,重新來編譯本程序的時候,由於新的環境中可能並沒有引用這個庫,所以直接編譯會出錯,於是咱們又要重新添加引用一次本庫!),唯一的辦法就是後期綁定COM對象(至於是否有簡單方法,我不知道的,因爲才學1天)。查閱了相關的一些資料之後得知,首先要通過COM對象名稱獲得這個對象在系統全局的一個ProgId,然後通過這個ProgId獲得這個對象的類型:

System.Type _ObjType = System.Type.GetTypeFromProgID(ComName);

然後通過這個類型來創建一個對象接口

object ComInstance= System.Activator.CreateInstance(_ObjType);       

之後,對該對象方法的調用都要通過type的InvokeMember方法來進行比如:

return ComType.InvokeMember(MethodName,System.Reflection.BindingFlags.InvokeMethod,null,ComInstance,args);

哎!寫起來的代碼量還真是有點大呢!於是,產生了一個想法,將這個COM對象後期綁定的玩意封裝起來做一個公共的,能省多少代碼就省多少代碼,儘量的減少代碼量:

代碼:

代碼寫的也不復雜,就這麼幾句,但是我想應該看起來更加明亮化了。

比如,我現在通過這個封裝操作庫來通過ip138查詢手機號碼的歸屬地

//可見現在這個代碼就已經很明顯很明白了,但是寫的代碼量還是有些大,如果反覆使用的話,就不爽了還是要寫比較多的代碼,於是開始着手對WinHttp這個COM對象進行封裝

封裝完成,此時再看,用本庫來查詢手機歸屬地的代碼:

現在的代碼已經減少到了很多了!

 

下面給出完整的COM封裝類庫代碼:

 

這個對WinHttp的封裝,還並不完全,只是封裝了一部分的方法和屬性,剩下的,如果又需要的人,可自行封裝!

Ip138手機號碼查詢

全部代碼下載地址

發佈了81 篇原創文章 · 獲贊 148 · 訪問量 79萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章