調(diào)用OCX控件的步驟: 1、在系統(tǒng)中注冊(cè)該ocx控件,命令:regsvr32.exe 控件位置(加 /u 參數(shù)是取消注冊(cè)) 2、在.net的工具箱中添加該控件,拖到form中去就可以了。
不用工具箱的話,自己手工添加,需要注意一個(gè)問(wèn)題,就是要用Aximp.exe來(lái)包裝一下ocx控件的類,然后再程序中引用生成的dll就可以了。 aximp [options]{file.dll | file.ocx} The following command generates MediaPlayer.dll and AxMediaPlayer.dll for the Media Player control msdxm.ocx. aximp c:\systemroot\system32\msdxm.ocx
ActiveX 控件導(dǎo)入程序?qū)?ActiveX 控件的 COM 類型庫(kù)中的類型定義轉(zhuǎn)換為 Windows 窗體控件。 Windows 窗體只能承載 Windows 窗體控件,即從 Control 派生的類。Aximp.exe 生成可承載于 Windows 窗體上的 ActiveX 控件的包裝類。這使您得以使用可應(yīng)用于其他 Windows 窗體控件的同一設(shè)計(jì)時(shí)支持和編程方法論。若要承載 ActiveX 控件,必須生成從 AxHost 派生的包裝控件。此包裝控件包含基礎(chǔ) ActiveX 控件的一個(gè)實(shí)例。它知道如何與 ActiveX 控件通信,但它顯示為 Windows 窗體控件。這個(gè)生成的控件承載 ActiveX 控件并將其屬性、方法和事件公開(kāi)為生成控件的屬性、方法和事件。
如果不包裝一下直接用,會(huì)出現(xiàn) 災(zāi)難性 錯(cuò)誤。上面已經(jīng)說(shuō)明了原因。
在項(xiàng)目中引用生成的ax開(kāi)頭的dll,在窗體代碼中增加: 聲明一個(gè)公有的控件對(duì)象: public AxISPICRECLib.AxISPICREC AxISPICREC; 在InitializeComponent()方法內(nèi)初始化控件: AxISPICREC = new AxISPICRECLib.AxISPICREC();//必須new對(duì)象,否則窗體設(shè)計(jì)器出問(wèn)題 ((System.ComponentModel.ISupportInitialize)(this.AxISPICREC)).BeginInit();//初始化開(kāi)始 this.Controls.Add(this.AxISPICREC);//添加控件 ((System.ComponentModel.ISupportInitialize)(this.AxISPICREC)).EndInit();
this.AxISPICREC.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("AxISPICREC.OcxState")));//設(shè)計(jì)控件狀態(tài)
如果遇到“正試圖在 os 加載程序鎖內(nèi)執(zhí)行托管代碼”這個(gè)錯(cuò)誤,請(qǐng)?jiān)O(shè)置“調(diào)試”--“異?!?br>"----"Managed Debugging Assistants"中勾掉"LoaderLock" 就可以了。
具體的可以看ms的文章:http://msdn2.microsoft.com/en-us/library/8ccdh774(VS.80).aspx
|