1. 開發(fā).net控件的示例程序
wincc v7.0支持的自定義.net控件,需要使用visual studio 2005編寫。下面以c#編程語言為例,開發(fā)一個(gè)簡單的.net控件,這個(gè)控件僅提供一個(gè)方法add, 實(shí)現(xiàn)兩數(shù)相加的功能。
在vs2005中新建一個(gè)工程calculatecontrol,工程類型為 visual c# 中的windows control library,在 solution explorer 窗口中,將usercontrol1.cs重命名為 calculate.cs,彈出的對話框詢問是否改變所有與usercontrol1相關(guān)的代碼,點(diǎn)擊[yes]確認(rèn)。在calculate.cs 文件的calculate類中添加add函數(shù),用于計(jì)算兩數(shù)之和,如下所示:
public double add(double dbla, double dblb)
{
return ( dbla + dblb );
}
在 calculate.cs 文件的calculate類之前插入如下代碼:
// calculatecontrol.calculate 是該控件的progid.
[progid(calculatecontrol.calculate)]
// 缺省的是classinterfacetype.autodispatch,該方式下只生成dispatch接口,
// 只能被使用script、vb等late bingding方式的com客戶使用。
[classinterface(classinterfacetype.autodual)]
然后在 calculate.cs 文件的上部插入如下代碼:
using system.runtime.interopservices;
將工具欄中的 solution configurations 下拉列表設(shè)為 release,在工程\屬性的 application 頁中,點(diǎn)擊 [assembly information…] 按鈕,選中 make assembly com-visible,并點(diǎn)擊 [ok] 按鈕確認(rèn)。在 build 頁中,選中 register for com interop 后,保存設(shè)置,并編譯程序,這樣編譯后同時(shí)會生成calculatecontrol.tlb文件,并且自動(dòng)將其注冊(命令行命令regasm有同樣的效果),注意到calculatecontrol.dll生成到 bin\release 文件夾中。
2.開發(fā).net控件的安裝程序
如果該控件需要在另一臺計(jì)算機(jī)上使用,需要為該控件設(shè)計(jì)安裝程序。新建一個(gè)vs2005工程setupcalculatecontrol,工程類型為setup and deployment \ setup project。在solution explorer窗口中的工程名(setupcalculatecontrol)節(jié)點(diǎn)上右鍵單擊,在彈出的快捷菜單中選擇add\assembly…項(xiàng),在browse頁中,找到剛才編譯的calculatecontrol.dll,將其加入到安裝程序中,注意到calculatecontrol.tlb 也一并被加入進(jìn)來。選中calculatecontrol.dll節(jié)點(diǎn),將其屬性中的register從vsdradonotregister改為vsdracom,用于在安裝過程中自動(dòng)注冊控件。將工具欄中的 solution configurations 下拉列表設(shè)為 release,編譯該安裝工程,在release 文件夾中可以找到生成的安裝文件(包括setup.exe和setupcalculatorcontrol.msi)。
3. 測試.net控件
使用activex control test container測試該控件的功能,雙擊tstcon32.exe(位于$\program files\microsoft visual studio 8\common7\tools),在edit菜單中選擇 [insert new control…] ,在彈出的 insert control 對話框中,點(diǎn)擊 [implemented categories…] 按鈕,選中 .net category 復(fù)選框,點(diǎn)擊 [ok] 按鈕確認(rèn)。在列表框中選擇 calculatecontrol.calculate,如圖1所示:
圖 1:在activex control test container中插入控件
點(diǎn)擊 [ok] 按鈕確認(rèn),這時(shí)該.net控件被加入到測試容器中。選中該控件,在control菜單中選擇[invoke methods…]項(xiàng),在method name中選擇add(method),分別設(shè)定兩個(gè)加數(shù)的值,點(diǎn)擊 [invoke] 按鈕,在 return value 文本框中可以看到兩數(shù)相加的結(jié)果。
4. 在wincc v7.0中加載和使用該控件的步驟
1.雙擊該控件的安裝文件setup.exe,安裝并注冊calculatecontrol.dll控件,用戶可以修改安裝目錄,并按照正常的步驟安裝(如果想卸載該控件,可以在控制面板的添加/刪除程序中移除該控件)。
2.新建一個(gè)wincc v7.0工程,并新建一個(gè)畫面。按照如下步驟加載和使用該控件:
在object palette(對象面板)的controls頁中的.net control上右鍵單擊,選擇 [add/remove…] 快捷菜單項(xiàng)。
在彈出的對話框中點(diǎn)擊[add…]按鈕,在打開的對話框中找到安裝路徑下的calculatecontrol.dll控件(例如:c:\program files\default company name\setupcalculatecontrol\ calculatecontrol.dll),雙擊該控件或者選中它并按[open]按鈕。
圖 2:在select .net object對話框中插入自定義.net控件
如圖2所示,在available controls列表中高亮顯示calculate項(xiàng),選中它前面的check box,點(diǎn)擊最下面的[ok]按鈕,即可將控件加入到wincc v7.0中。
將.net control節(jié)點(diǎn)展開,找到” calculatecontrol.calculate”并將其拖拽到窗體上的合適的位置。
在窗體上加入一個(gè)靜態(tài)文本控件,將其對象名稱改為 calculateresult。
在窗體上加入一個(gè)按鈕,將其文本改為add,在按鈕的鼠標(biāo)左鍵單擊(button\mouse\press left)事件中加入vbs腳本,創(chuàng)建.net控件并調(diào)用它的add方法,源程序如下所示:
dim objcalculatecontrol
dim objcalculateresult
set objcalculatecontrol = createobject(calculatecontrol.calculate)
set objcalculateresult = screenitems(calculateresult)
objcalculateresult.text = objcalculatecontrol.add ( 6, 12 )
注意,wincc v6.2使用screenitems(”控件對象名”)引用加入窗體的activex控件。但wincc v7.0不能使用這種方法,建議使用createobject(“.net控件的progid”) 來創(chuàng)建和引用加入的.net控件。
保存并運(yùn)行該程序,點(diǎn)擊[add]按鈕,靜態(tài)文本中將顯示結(jié)果18。
注意:本文提供了 wincc v7.0 支持.net控件的基本編程方法和測試程序,所有的源程序及測試過程僅供參考。