dllactivex控件web頁(yè)面調(diào)用例子_第1頁(yè)
dllactivex控件web頁(yè)面調(diào)用例子_第2頁(yè)
dllactivex控件web頁(yè)面調(diào)用例子_第3頁(yè)
dllactivex控件web頁(yè)面調(diào)用例子_第4頁(yè)
dllactivex控件web頁(yè)面調(diào)用例子_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、DLL+ActiveX控件+WEB頁(yè)面調(diào)用例子一、概述因項(xiàng)目需要,開始學(xué)習(xí)并研究VC、DLL及ActiveX控件,網(wǎng)上資料找了很多,但沒(méi)一個(gè)可用的或者說(shuō)沒(méi)一個(gè)例子可理解并運(yùn)行的。沒(méi)辦法,自己研究吧。功夫不負(fù)有心人,終有小成了,呵呵,現(xiàn)在把自己學(xué)習(xí)總結(jié)了一下,獻(xiàn)給需要的人。DLL(動(dòng)態(tài)鏈接庫(kù)):分WIN32DLL和MFCDLLActiveX:分ATL控件和MFC控件兩類(也是一個(gè)DLL)WEB:JAVASCRIPT調(diào)用->ActiveX調(diào)用->DLL完成加法運(yùn)算并返回值,在頁(yè)面上顯示。二、開發(fā)(VS2008)1 、DLL庫(kù)編寫:文件-新建-WIN32控制臺(tái)->填寫項(xiàng)目名稱-選擇

2、DLL-空項(xiàng)目-完成。(1)在解決方案面板中,加入一個(gè)頭文件testdll.h,內(nèi)容:復(fù)制代碼代碼如下:#ifndef_DLLTUT_DLL_H_#define_DLLTUT_DLL_H_#defineDECLDIR_declspec(dllexport)#else#defineDECLDIR_declspec(dllimport)#endif/extern"C"告訴編譯器該部分可以在C/C+中使用。extern"C"DECLDIRintAdd(inta,intb);DECLDIRvoidFunction(void);#endif(2)在解決方案面板中,

3、加入一個(gè)實(shí)現(xiàn)文件testdll.cpp,內(nèi)容:復(fù)制代碼代碼如下:#include#defineDLL_EXPORT#include"testdll.h"extern"C"/這里主要用到ADD方法。DECLDIRintAdd(inta,intb)return(a+b);DECLDIRvoidFunction(void)std:cout填寫項(xiàng)目名稱-選擇控制臺(tái)程序-空項(xiàng)目-完成。在解決方案面板中,加入一個(gè)實(shí)現(xiàn)文件loaddll.cpp內(nèi)容:復(fù)制代碼代碼如下:#include#includeusingnamespacestd;typedefint(*AddFu

4、nc)(int,int);/定義指針函數(shù)、接口。typedefvoid(*FunctionFunc)();intmain()AddFunc_AddFunc;FunctionFunc_FunctionFunc;cout<<"-獲取DLL-."<<endl;/L表示使用UNICODE字符集,要和項(xiàng)目的字符集保持一致。HINSTANCEhInstLibrary=LoadLibrary(L"E:ProjectVSLoadDllReleaseTestDll.dll");if(hInstLibrary=NULL)cout<<&qu

5、ot;Dll加載【失敗】."<<endl;FreeLibrary(hInstLibrary);elsecout<<"Dll加載【成功】."<<endl;_AddFunc=(AddFunc)GetProcAddress(hInstLibrary,"Add");_FunctionFunc=(FunctionFunc)GetProcAddress(hInstLibrary,"Function");if(_AddFunc=NULL)|(_FunctionFunc=NULL)FreeLibrary(

6、hInstLibrary);/釋放elsecout<<"-獲取DLL函數(shù)【OK】-."<<endl;cout<<_AddFunc(1,1)<<endl;/開始調(diào)用_FunctionFunc();/cin.get();/獲得焦點(diǎn),這樣就不會(huì)程序就不會(huì)一閃而過(guò)了。FreeLibrary(hInstLibrary);/調(diào)用完后,要釋放內(nèi)存。return(1);2、ActiveX控件實(shí)現(xiàn):這里我們選擇ATL控件實(shí)現(xiàn),而非MFCActiveX。文件-新建-ATL項(xiàng)目-填寫項(xiàng)目名稱(“FROMYANTA”)I-選擇動(dòng)態(tài)鏈接庫(kù)(DLL)-完

7、成。完成后,會(huì)在右邊“解決方案資源管理器”生成很多頭H文件和CPP實(shí)現(xiàn)文件,這些都是默認(rèn)的不要修改。(1)、添加一個(gè)ALT簡(jiǎn)單對(duì)象:鼠標(biāo)郵件點(diǎn)擊項(xiàng)目名稱(剛才起的名字)選擇-添加類-選擇ATL簡(jiǎn)單對(duì)象。下一步起一個(gè)名字:“ytiicrj”下一步:其他不變,在支持中,選擇“連接點(diǎn)”和“對(duì)象支持”完成。IE下一步給“ytiicrj”添加一個(gè)方法,以便WEB頁(yè)面調(diào)用。在“類視圖”選擇“iytiicrj”(有個(gè)灰色的鑰匙圖標(biāo))鼠標(biāo)右鍵添加-添加方法。方法起名為“GetContent-”參數(shù)屬性選擇IN,參數(shù)類型選擇LONG參數(shù)名A-添加;繼續(xù);參數(shù)屬性選擇IN,參數(shù)類型選擇LONG參數(shù)名B»

8、添加;繼續(xù);參數(shù)屬性選擇OUT和RETVAL,參數(shù)類型選擇LONG*參數(shù)名out-添加-點(diǎn)擊完成。這樣就在ytiicrj.H頭文件中添加了一個(gè)(在最后一行):STDMETHOD(GetContent)(LONGa,LONGb,LONG*out);并在ytiicrj.CPP文件中添加了一個(gè)實(shí)現(xiàn)類:復(fù)制代碼代碼如下:STDMETHODIMPCCaluNumCtrl:GetContent(LONGa,LONGb,LONG*out)/TODO:在此添加實(shí)現(xiàn)代碼returnS_OK;(2)、在ytiicrj.H文件中,調(diào)用DLL類庫(kù)。代碼如下:/CaluNumCtrl.h:ytiicrj的聲明黑體(粗體

9、)部分是具體的實(shí)現(xiàn),其他未動(dòng)。復(fù)制代碼代碼如下:#pragmaonce#include"resource.h"/主符號(hào)#include/添加#include"AtlActiveX_i.h"#include"_ICaluNumCtrlEvents_CP.h"#ifdefined(_WIN32_WCE)&&!defined(_CE_DCOM)&&!defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)#error"WindowsCE平臺(tái)(如不提供完全DC

10、OM支持的WindowsMobile平臺(tái))上無(wú)法正確支持單線程COM對(duì)象。定義_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA可強(qiáng)制ATL支持創(chuàng)建單線程COM對(duì)象實(shí)現(xiàn)并允許使用其單線程COM對(duì)象實(shí)現(xiàn)。rgs文件中的線程模型已被設(shè)置為“Free”,原因是該模型是非DCOMWindowsCE平臺(tái)支持的唯一線程模型。"#endif/ytiicrjclassATL_NO_VTABLECytiicrj:/增加一下一行:安全提示解除,-當(dāng)運(yùn)行瀏覽器調(diào)用時(shí),不會(huì)提示安全問(wèn)題。publicIObjectSafetyImpl,publicCComObjectRootEx

11、,publicCComCoClass,publicIConnectionPointContainerImpl,publicCProxy_ICaluNumCtrlEvents,publicIObjectWithSiteImpl,publicIDispatchImplpublic:/以下三行實(shí)現(xiàn)定義。typedefint(*AddFunc)(int,int);/類型定義,對(duì)應(yīng)DLLADD方法。Func自定義,隨便寫。HINSTANCEhInstLibrary;AddFunc_AddFunc;/類映射Cytiicrj()/開始調(diào)用DLL,進(jìn)行計(jì)算。hInstLibrary=LoadLibrary(L

12、"TestDll.dll");/把寫好的DLL文件放在此項(xiàng)目生成的目錄下if(hInstLibrary=NULL)FreeLibrary(hInstLibrary);/資源釋放else/調(diào)用方法,返回方法句柄。_AddFunc=(AddFunc)GetProcAddress(hInstLibrary,"Add");DECLARE_REGISTRY_RESOURCEID(IDR_CALUNUMCTRL)BEGIN_COM_MAP(Cytiicrj)COM_INTERFACE_ENTRY(ICaluNumCtrl)COM_INTERFACE_ENTRY(ID

13、ispatch)COM_INTERFACE_ENTRY(IConnectionPointContainer)COM_INTERFACE_ENTRY(IObjectWithSite)/增加一下一行:安全提示解除,-當(dāng)運(yùn)行瀏覽器調(diào)用時(shí),不會(huì)提示安全問(wèn)題。COM_INTERFACE_ENTRY(IObjectSafety)END_COM_MAP()BEGIN_CONNECTION_POINT_MAP(Cytiicrj)CONNECTION_POINT_ENTRY(_uuidof(_ICaluNumCtrlEvents)END_CONNECTION_POINT_MAP()DECLARE_PROTECT

14、_FINAL_CONSTRUCT()HRESULTFinalConstruct()returnS_OK;voidFinalRelease()FreeLibrary(hInstLibrary);public:STDMETHOD(GetContent)(LONGa,LONGb,LONG*out);OBJECT_ENTRY_AUTO(_uuidof(CaluNumCtrl),Cytiicrj)(3)、回到在ytiicrj.PP文件中,添加實(shí)現(xiàn)代碼如下:復(fù)制代碼代碼如下:STDMETHODIMPCCaluNumCtrl:GetContent(LONGa,LONGb,LONG*out)/TODO:在此添

15、加實(shí)現(xiàn)代碼intsum=this->_AddFunc(static_cast(a),static_cast(b);*out=static_cast(sum);this->_AtlFinalRelease();returnS_OK;(4)、生成DLL:這步很簡(jiǎn)單,選擇Release模式,點(diǎn)擊項(xiàng)目進(jìn)行生成(會(huì)提示選擇REG32注冊(cè),那就選擇被)。這樣就在Release目錄下生成了很多文件,我們要的就是一個(gè)DLL文件。3、DLL和ATLActiveX控件DLL打包為CAB文件:例如:生成test.CAB后,WEB頁(yè)面就會(huì)提示下載安裝。(1)首先定義setup.inf文件:它描述了下載的內(nèi)

16、容和目標(biāo)目錄還有版本號(hào)及相應(yīng)的DLL文件。這個(gè)要手動(dòng)編寫的,我的內(nèi)容如下(對(duì)應(yīng)名稱自行修改吧):復(fù)制代碼代碼如下:version;versionsignature(sameforbothNTandWin95)donotremovesignature="$CHICAGO$"AdvancedINF=2.0Add.CodeAtlActiveX.dll=AtlActiveX.dllTestDll.dll=TestDll.dllsetup.inf=setup.infinstall.filesAtlActiveX.dll=AtlActiveX.dllTestDll.dll=TestDl

17、l.dllsetup.inf=setup.infclsid=4AE870B5-C7FB-4171-A47E-7F57AFD86F67file-win32-x86=thiscabFileVersion=1,0,0,1DestDir=11RegisterServer=yesTestDll.dllfile-win32-x86=thiscabDestDir=11FileVersion=1,0,0,1RegisterServer=yessetup.inffile=thiscabRegisterFiles%11%AtlActiveX.dll;endofINFfile(2)整合資源:將所用到的DLL全部放到一個(gè)目錄下包括setup.inf文件,然后在開始運(yùn)行:IExpress命令去生成CAB包。運(yùn)行后,選擇第一個(gè),下一步,選擇第三個(gè),下一步,添加文件(選擇你的DLL和INF文件),下一步,選擇一個(gè)輸出目錄并創(chuàng)建一個(gè)CAB文件名,再選擇第二個(gè)選項(xiàng),下一步,選擇第二個(gè)選項(xiàng),然后OK。這樣就生成了一個(gè)CAB文件。(3)WEB頁(yè)面調(diào)用ActiveX控件進(jìn)行加法運(yùn)算:test.htm 內(nèi)寫一個(gè)test.htm網(wǎng)頁(yè)和CAB文件放在一個(gè)目錄,容如下:復(fù)制代碼代碼如下:NewPagefunctiondoTest()varsum=CaluNumCtr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論