欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C#編寫(xiě)ActiveX控件

      利用雙休的時(shí)間研究了一下c#開(kāi)發(fā)ActiveX控件。由于我用Vs2010開(kāi)發(fā),參考的文章不是Vs2010和Win7的環(huán)境下開(kāi)發(fā)的,中間遇到許多問(wèn)題,不過(guò)總算學(xué)到點(diǎn)東西。

我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、中站ssl等。為超過(guò)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的中站網(wǎng)站制作公司


我參考的文章如下(非Vs2010開(kāi)發(fā)): 
    用C#編寫(xiě)ActiveX控件(一)http://www.cnblogs.com/homer/archive/2005/01/04/86473.html
    用C#編寫(xiě)ActiveX控件(二)http://www.cnblogs.com/homer/archive/2005/01/08/88780.html
    用C#編寫(xiě)ActiveX控件(三)http://www.cnblogs.com/homer/archive/2005/01/26/97822.html
在我仔細(xì)看完上邊三篇文章之后,發(fā)現(xiàn)有用Vs2010開(kāi)發(fā)的,如果想快速學(xué)習(xí),可以參考下邊的文章。
    .NET環(huán)境下創(chuàng)建Activex      http://www.cnblogs.com/liulixiang/archive/2011/05/23/2054371.html
    使用VS2010 C#開(kāi)發(fā)ActiveX控件(上) http://www.cnblogs.com/yungboy/archive/2011/01/10/1932433.html
    使用VS2010 C#開(kāi)發(fā)ActiveX控件(下),完整代碼下載  http://www.cnblogs.com/yungboy/archive/2011/01/11/1932438.html

下邊對(duì)學(xué)習(xí)的內(nèi)容進(jìn)行總結(jié),主要是對(duì)我參考的文章不足部分進(jìn)行修改。

一. 建立ActiveX控件(暫時(shí)稱為ActiveX控件,其實(shí)是winform下的用戶控件)。
1.打開(kāi)vs2010,新建空年方案。方案名稱自己取。
   然后,新建項(xiàng)目->Visual C#->Windows->類(lèi)庫(kù),名稱為HelloWorld。
2. 刪除自動(dòng)創(chuàng)建的Class1.cs文件,然后在HelloWorld上右鍵->添加->新建項(xiàng),在彈出的窗口中選擇“用戶控件”,名稱為Demo,此時(shí)會(huì)出現(xiàn)一個(gè)類(lèi)似于winform設(shè)計(jì)界面,我們?cè)谏厦鎻墓ぞ呦渲型蟿?dòng)一個(gè)Label在上面,并設(shè)定Label的Text為"HelloWorld"。
此時(shí)編譯項(xiàng)目,可以生成HelloWorld.dll。 將此dll拷貝到IIS的虛擬根目錄下,然后在虛擬目錄的物理目錄下建立一個(gè)helloworld.htm的文件,html代碼如下:
body bgcolor='#223344'>
object id="helloworld" classid=’http://localhost/HelloWorld.dll#HelloWorld.Demo’ Width="184" Height="96" VIEWASTEXT> object>
body>
    注:我們可以在Object的classid中使用“http://localhost/類(lèi).dll#命名空間.類(lèi)名”這樣的方式使用未注冊(cè)的控件(此時(shí)還不能稱為ActiveX)。
3、測(cè)試:在IE地址欄中輸入以下地址:http://localhost/helloworld.htm,出現(xiàn)下圖界面,控件已經(jīng)成功在頁(yè)面上顯示了。OK,我們已經(jīng)完成了第一步。
C#編寫(xiě)ActiveX控件


     但是問(wèn)題到這里還沒(méi)有解決。不相信?你可以試試在另外一臺(tái)機(jī)器上測(cè)試,注意需要修改對(duì)應(yīng)的html代碼和URL地址。你可以看到這個(gè)在原來(lái)顯示控件的地方是一個(gè)紅色的叉,或者還會(huì)彈出一個(gè)對(duì)話框,表示這個(gè)控件沒(méi)有任何權(quán)限。出現(xiàn)這個(gè)結(jié)果是微軟的默認(rèn)設(shè)置造成的,必須在控件項(xiàng)項(xiàng)目中Properties下AssemblyInfo.cs中增加一個(gè)安全聲明,聲明這個(gè)控件必須使用賦予的權(quán)限,才可以顯示出界面。添加語(yǔ)句如下:
//設(shè)置控件的權(quán)限
[assembly: System.Security.AllowPartiallyTrustedCallers()]
     現(xiàn)在重新編譯,并且替換以前的dll,界面又可以顯示出來(lái)了。 

    到現(xiàn)在為止,我們編寫(xiě)的還不是真正的ActiveX控件。這個(gè)控件只是能夠?qū)崿F(xiàn)自身的顯示,并且不能實(shí)現(xiàn)更多的功能,比如實(shí)現(xiàn)與腳本的交互或者操作客戶端的注冊(cè)表或者磁盤(pán)。這如果我們希望這個(gè)控件突破.Net Framework安全模型的限制,實(shí)現(xiàn)與腳本的交互或者操作客戶端的注冊(cè)表或者磁盤(pán)的話,必須要讓它成為真正的ActiveX控件。

二. 將用戶控件變成Com可見(jiàn)
    1.在HelloWorld(用戶控件)項(xiàng)目上點(diǎn)擊右鍵,選擇屬性,將打開(kāi)項(xiàng)目屬性面板,選擇應(yīng)用程序標(biāo)簽頁(yè),點(diǎn)擊“程序集信息”按鈕,在彈出的窗口中勾選“使程序集COM可見(jiàn)”(下圖為別人的圖片,僅供參考)

C#編寫(xiě)ActiveX控件

C#編寫(xiě)ActiveX控件
    2.切換到生成標(biāo)簽頁(yè),然后勾選“為Com互操作注冊(cè)”,在該頁(yè)面的最上面,有一個(gè)配置選項(xiàng),切換到realse,并再次勾選“為Com互操作注冊(cè)”。這樣無(wú)論是在debug還是在release狀態(tài)下,都可以把用戶控件當(dāng)做com接口使用。如下圖。(如果不使用realse模式,realse可以不設(shè)置。) 


C#編寫(xiě)ActiveX控件

     注意:在Win7中,溝選“為Com互操作注冊(cè)”后,如果不是Administrtor用戶,編譯項(xiàng)目會(huì)出錯(cuò)。所以一定要記得在Administrator下編寫(xiě)代碼。 

3、修改用戶控件后臺(tái)代碼,代碼如下, 
using System.Runtime.InteropServices;
namespace HelloWorld
{
    [Guid("F3F99F87-276D-4F7C-96F9-85F5261773CD")]
    public partial class Demo: UserControl
    {
        public Demo()
        {
            InitializeComponent();
        }      
    }  
}

     注:創(chuàng)建Guid的方法如下:
        在vs2010中,工具->創(chuàng)建GUID,在彈出的窗口中,在GUID格式中選擇第五個(gè),點(diǎn)擊新建GUID,然后點(diǎn)擊復(fù)制,然后在點(diǎn)擊退出,此時(shí)返回到VS2010中,在相應(yīng)位置粘貼即可。 
C#編寫(xiě)ActiveX控件




     重新編譯,使用VS2010編譯后,此控件會(huì)自動(dòng)被注冊(cè)在系統(tǒng)中。我們只需要在“OLE/COM對(duì)象查看器”中點(diǎn)Grouped by Component Category->.Net Category->點(diǎn)擊你編寫(xiě)的類(lèi)庫(kù)名.用戶控件類(lèi)查看。如下圖。“OLE/COM對(duì)象查看器”位于開(kāi)始菜單->Vs2010安裝目錄->Microsoft Windows SDK Tools中。
C#編寫(xiě)ActiveX控件

  可以看到,我們寫(xiě)的HelloWorld.Demo已經(jīng)被正確識(shí)別為COM組件?,F(xiàn)在,我們已經(jīng)可以像使用其它ActiveX控件一樣在網(wǎng)頁(yè)中顯示了。在HelloWorld.Demo點(diǎn)擊鼠標(biāo)右鍵,如圖: 
C#編寫(xiě)ActiveX控件
   選擇Copy HTML  Tag to Clipboard,可以將代碼拷入剪貼板。 
   現(xiàn)在,我們改寫(xiě)helloworld.htm,html代碼如下: 

C#編寫(xiě)ActiveX控件
body bgcolor='#223344'> 
C#編寫(xiě)ActiveX控件
="helloworld" 
C#編寫(xiě)ActiveX控件
   classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" Width="184" Height="96"> 
C#編寫(xiě)ActiveX控件
object> 
C#編寫(xiě)ActiveX控件
body> 
C#編寫(xiě)ActiveX控件

使用IE查看,我們的控件又可以在網(wǎng)頁(yè)中顯示了。不過(guò),這個(gè)時(shí)候它已經(jīng)不再是以前的.net WinForm控件了,而是貨真價(jià)實(shí)的ActiveX控件了。 
    不過(guò),編寫(xiě)ActiveX控件的任務(wù)還沒(méi)有完成。我們還沒(méi)有實(shí)現(xiàn)腳本互動(dòng)或者讀寫(xiě)I/O,也沒(méi)有實(shí)現(xiàn)ActiveX控件的自動(dòng)分發(fā)。

三. 實(shí)現(xiàn)與Js交互
     我們?cè)贒emo中加入ShowMessage方法: 
C#編寫(xiě)ActiveX控件
public void ShowMessage(string msg) 
C#編寫(xiě)ActiveX控件
        { 
C#編寫(xiě)ActiveX控件
            if(msg != null) 
C#編寫(xiě)ActiveX控件
            { 
C#編寫(xiě)ActiveX控件
                MessageBox.Show(msg); 
C#編寫(xiě)ActiveX控件
            } 
C#編寫(xiě)ActiveX控件
        } 
C#編寫(xiě)ActiveX控件

    我們重新編譯。在重新訪問(wèn)頁(yè)面之前,我們先來(lái)修改html代碼: 
C#編寫(xiě)ActiveX控件
body bgcolor='#223344'> 
C#編寫(xiě)ActiveX控件
="helloworld" 
C#編寫(xiě)ActiveX控件
   classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" Width="184" Height="96" 
C#編寫(xiě)ActiveX控件

C#編寫(xiě)ActiveX控件
object> 
C#編寫(xiě)ActiveX控件
br> 
C#編寫(xiě)ActiveX控件
input type='button' onclick='helloworld.ShowMessage(“Hello World!”)' value='Click'> 
C#編寫(xiě)ActiveX控件

C#編寫(xiě)ActiveX控件

    現(xiàn)在,重新訪問(wèn)http://localhost/helloworld.htm,單擊Click按鈕,應(yīng)該可以實(shí)現(xiàn)交互了。   
    但是結(jié)果卻很遺憾,我們發(fā)現(xiàn)IE跳出了對(duì)話框,(注,我在編寫(xiě)此項(xiàng)目時(shí),好像沒(méi)有跳出這個(gè)提示。)如圖所示: 
C#編寫(xiě)ActiveX控件
    單擊確定之后,我們發(fā)現(xiàn)JS報(bào)錯(cuò)。根據(jù)提示,我們判斷可以通過(guò)修改IE的設(shè)置使控件運(yùn)行。打開(kāi)IE的 工具——〉Internet選項(xiàng)——〉安全——〉
本地Intranet——〉自定義級(jí)別——〉對(duì)沒(méi)有標(biāo)記為安全的ActiveX控件進(jìn)行初始化和運(yùn)行,將其值設(shè)為啟用。我們刷新頁(yè)面,現(xiàn)在終于可以正確運(yùn)行了。

    當(dāng)然,我們不能指望我們的客戶和我們一樣修改這個(gè)值。畢竟,一是操作麻煩,二是給電腦帶來(lái)了很大的安全風(fēng)險(xiǎn)。所以需要自義IObjectSafety接口,并讓UserControl實(shí)現(xiàn)接口。
    首先我們自己用C#定義這個(gè)接口,此接口必須與下邊接口代碼相同,包括Guid值都要一樣。
using System.Runtime.InteropServices;
namespace HelloWorld
{
    [Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {
        void GetInterfacceSafyOptions(
              System.Int32 riid,
              out System.Int32 pdwSupportedOptions,
              out System.Int32 pdwEnabledOptions);
        void SetInterfaceSafetyOptions(
             System.Int32 riid,
             System.Int32 dwOptionsSetMask,
             System.Int32 dwEnabledOptions);
    }
    public class CLsObjectSafety
    {
        public const System.Int32 INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
        public const System.Int32 INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
    }
}
     在UserControl后臺(tái)實(shí)現(xiàn)接口,代碼如下。
using System.Runtime.InteropServices;
namespace HelloWorld
{
    [Guid("F3F99F87-276D-4F7C-96F9-85F5261773CD")]
    public partial class Demo: UserControl,IObjectSafety
    {
        public Demo()
        {
            InitializeComponent();
        }
        public void ShowMessage(string msg)
        {
            if (msg != null)
            {
                MessageBox.Show(msg);
            }
        }
        public void GetInterfacceSafyOptions(Int32 riid, out Int32 pdwSupportedOptions, out Int32 pdwEnabledOptions)
        {
            // TODO:  添加WebCamControl.GetInterfacceSafyOptions 實(shí)現(xiàn)
            pdwSupportedOptions = CLsObjectSafety.INTERFACESAFE_FOR_UNTRUSTED_CALLER;
            pdwEnabledOptions = CLsObjectSafety.INTERFACESAFE_FOR_UNTRUSTED_DATA;
        }
        public void SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32 dwEnabledOptions)
        {
            // TODO:  添加WebCamControl.SetInterfaceSafetyOptions 實(shí)現(xiàn)
        }
    }  
}
     重新編譯,然后將IE里面的設(shè)置改回來(lái)。現(xiàn)在,我們發(fā)現(xiàn),和JS的交互已經(jīng)沒(méi)有問(wèn)題了。    
      這樣,一個(gè)最基本的ActiveX控件已經(jīng)寫(xiě)好了。你可以在這個(gè)控件的基礎(chǔ)上增加任何你需要的功能。到這里,編寫(xiě)控件的任務(wù)已經(jīng)完成了。

四.打包并發(fā)布ActiveX     ActiveX控件開(kāi)發(fā)完成后,我們要將ActiveX控件打包和發(fā)布,以便于用戶安裝。ActiveX控件可以使用VS 2010的安裝項(xiàng)目進(jìn)行部署,使用VS 2010創(chuàng)建Windows Form的安裝工程就可以將ActiveX的dll進(jìn)行打包。在打包時(shí)注意將ActiveX控件項(xiàng)目作為主輸出項(xiàng)目,并設(shè)置其Register屬性為vsdrpCOM,創(chuàng)建打包項(xiàng)目如下圖所示:       
C#編寫(xiě)ActiveX控件
    創(chuàng)建一個(gè)Windows 安裝項(xiàng)目,并給項(xiàng)目添加項(xiàng)目輸出,如下圖所示:

C#編寫(xiě)ActiveX控件
    在添加項(xiàng)目輸出時(shí),我們將ActiveX項(xiàng)目添加進(jìn)來(lái),在項(xiàng)目中選擇ActiveX控件項(xiàng)目(CardReader.Controls),Primary Out(基本輸出),如下圖所示:
C#編寫(xiě)ActiveX控件

添加完文件后,設(shè)置Primary Output From CardReader.Controls的Register屬性為vsdrpCOM。
C#編寫(xiě)ActiveX控件

設(shè)置完成后右擊安裝工程,修改安裝工程屬性,如下圖所示:
C#編寫(xiě)ActiveX控件

         在上圖中可以設(shè)置輸出的文件名,這個(gè)文件名就是打包后安裝文件.MSI的文件名。設(shè)置包文件、壓縮方式,CAB size,這三項(xiàng)均選擇默認(rèn)值即可。
最后設(shè)置安裝URL,這里的安裝URL是用來(lái)發(fā)布或者使用ActiveX的URL地址的。(此處我沒(méi)弄明白這個(gè)地址到底有什么用?)
     注:打包成exe文件以后,我們可以進(jìn)一步對(duì)安裝文件進(jìn)行打包成.cab文件,安裝隱藏了msi 安裝界面,類(lèi)似于cabarc 打包ocx 的效果
(點(diǎn)擊install 之后其他的都后臺(tái)做了),本文中暫不討論,感興趣的讀者可以使用CAB SDK 中的工具CABARC.EXE (下載地址 http://support.microsoft.com/kb/310618 )來(lái)進(jìn)行。
這樣打包文件就生成了,將生成后的安裝文件(exe和msi)拷貝到(本例中為默認(rèn)網(wǎng)站目錄下的ActiveX文件夾中),現(xiàn)在我們又要重新改動(dòng)helloworld.htm文件了。修改后的結(jié)果如下: 
body bgcolor='#223344'>
object id="helloworld"
   classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" Width="184" Height="96" codebase="Setup.exe"> 
object>
br>
input type='button' onclick='helloworld.ShowMessage("Hello World!")' value='Click'>
body>
  
    注意,我們?cè)趏bject塊中加入了codebase屬性,這就是制定的下載控件的位置,可以使用相對(duì)路徑。當(dāng)使用codebase進(jìn)行安裝時(shí),Ie仍然會(huì)攔截,不允許安裝。需要將當(dāng)前網(wǎng)站添加到信任站點(diǎn)中。如果這樣的話,可以直接給個(gè)鏈接讓用戶自已下載安裝。對(duì)于這兩種方法需要待觀察。

    別忙,我們現(xiàn)在還不能正確請(qǐng)求這個(gè)頁(yè)面,因?yàn)槲覀冞€沒(méi)有對(duì)我們的控件進(jìn)行簽名。
    簽名可以采用兩種方式,一種是在上面生成安裝程序的時(shí)候簽名,另一種是使用sn.exe簽名。推薦大家使用后者。

網(wǎng)站題目:C#編寫(xiě)ActiveX控件
URL鏈接:http://chinadenli.net/article14/gphcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、自適應(yīng)網(wǎng)站搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
1024你懂的在线视频| 沐浴偷拍一区二区视频| 欧美日韩久久精品一区二区| 男女午夜福利院在线观看| 国产又猛又大又长又粗| 国产亚洲精品岁国产微拍精品| 日本丰满大奶熟女一区二区| 欧美日韩国产另类一区二区| 精品久久久一区二区三| 欧美国产亚洲一区二区三区| 欧美一区二区三区99| 日本高清二区视频久二区| 国产肥女老熟女激情视频一区| 神马午夜福利一区二区| 老熟女露脸一二三四区| 免费一区二区三区少妇| 91亚洲精品综合久久| 成人亚洲国产精品一区不卡| 亚洲欧美日韩国产综合在线| 日本av一区二区不卡| 欧美一级不卡视频在线观看| 欧美黑人在线精品极品| 婷婷伊人综合中文字幕| 日本午夜免费观看视频| 99久久精品免费看国产高清| 日韩成人h视频在线观看| 欧美午夜伦理在线观看| 98精品永久免费视频| 午夜亚洲精品理论片在线观看| 青青操在线视频精品视频| 国产毛片不卡视频在线| 小黄片大全欧美一区二区| 午夜传媒视频免费在线观看| 午夜亚洲精品理论片在线观看 | 免费黄色一区二区三区| 国产精品日韩精品最新| 91免费一区二区三区| 亚洲欧美日韩国产综合在线| 成年女人午夜在线视频 | 国产精品午夜视频免费观看| 成人区人妻精品一区二区三区|