青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life is game

(本色)
posts - 11, comments - 4, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

[網頁]+ [ ALT COM AppWizard]

Posted on 2006-11-23 11:53 原色 閱讀(1175) 評論(1)  編輯 收藏 引用

以下為轉貼(http://www.chinaaspx.com/club/topic_6_16277.htm
----------------------------------

作者:富 亮

--------------------------------------------------------------------------------

用ASP寫網頁的程序員,一定對VBSript語句“Set Conn=Server.Object(‘ADODB.Connection’)”非常熟悉。該語句是利用ASP的Server對象創建了一個數據庫控件,它提供了一系列的方法和屬性,可以幫助我們在ASP中方便的實現數據庫的操作。類似的,在Visual InteDev6.0中,我們還可以看到一些ASP的內置組件如“Scripting.FileSystemObject”。但是,在有的場合,僅利用這些是不夠的或復雜的,而且ASP的Script語言遠不如C++語言功能強大(如建立鏈表,B+樹結構等),這就使我們想到,是否可以在開發網頁時使用具有良好數據結構的C++語言。雖然CGI,ISAPI等都可謂是用C/C++開發網頁的先驅,但我們知道CGI,ISAPI的開發周期很長,且不與網頁結合,直觀性差,編寫、調試困難;而在穩定性上,由于ISAPI是動態鏈接的方式,因此在執行若出現問題,會使得Web服務器一起癱瘓。而ASP正好能補足這些缺點。
由此可見,如果能學會編寫ASP組件就能結合ASP的長處編寫出強大的網頁。可惜的是,筆者在市面上很少看到有專門講如何用VC++來制作ASP組件的書籍。一般VC書籍只講一些寫Windows窗口程序或再加上編寫普通的動態鏈接庫。而ASP書籍更是只談ASP中內置組件的使用方法。其實,如果要真正掌握編寫ASP組件的機制,要牽涉到大量的COM技術的知識。而一些講COM技術的書是很深奧的,且很少能結合有用的實例。為此,筆者想借此文以最簡單的方法向大家介紹編寫過程。所謂簡介,正說明將不涉及COM知識的具體細節,僅給出實現方法。
一、建立工程
打開VC++6.0,選擇New Projects中的ALT COM AppWizard, 并輸入好工程名(如MyStudio),記住該工程名將成為ASP組件名的一部分(其實可以修改,但很麻煩),在下一頁上選擇Server Type 為DLL,并可考慮在Support MFC前打勾(想必使用MFC編程的人不少)。按Finish結束。在生成的代碼中有四個標準的導出函數注冊DLL的,我們不必關心。
::點擊圖片在新窗口中打開::
二、創建COM對象(新建ATL活動模版庫類)
在菜單上選擇Insert New Class,并新建一個ATL Class,如取名為CmyComponent,你會發現在接口表中出現了一個ImyComponent,以后創建該接口的方法和屬性就可以在ASP中使用了。把Aggregatable選項去掉,我們不需要它。保持其他不變。
::點擊圖片在新窗口中打開::
三、添加接口方法
在ClassView中,右擊ImyComponent,在出現的菜單中按Add Method。如圖,在Method Name中可寫上方法名如InitMyComp。在Parameters中寫上方法的參數如[in]int Number1,[out,retbal]int* Number2。這里要特別說明的是參數的寫法。
::點擊圖片在新窗口中打開::
1.對于傳入的參數必須在參數前加上[in],然后可跟上如int n或float f等。且每個傳入參數前都必須寫明。
2.對于調用方法的返回,不再是該方法名前的類型(因為所有這些方法都返回HRESULT,即表明是否調用成功),所以使用傳出的參數,在參數前必須加上[out,retval],然后可跟上如int* n 或者float* f等(如果返回的是int 或float 類型值時)。且每個方法僅限于返回一個這樣的參數。在函數體中可如寫上如“*Number2=Number1;”,表示把輸入參數作為傳出參數。
::點擊圖片在新窗口中打開::
3.對于最常用的字符串參數在此我們使用BSTR str而不是通常的char* 或CString,所以在參數中需要寫作[in]BSTR str 或[out,retval]BSTR* str。需要特別注意與CString的轉換。如新建一個函數StrConv([in]BSTR bstr1,[out,retval]BSTR* bstr2),在函數體中可寫上如:
CString str;
str=bstr1;
str=str.Left(str.GetLength()-1);
*bstr2=str.AllocSysString();
4.對于想把一個ASP對象作為參數的方法(如Request對象),可以使用[in]Iunkown *pIUnk,在函數體內,可用如下語句:(具體請查閱MSDN中的相關類的內容)
IRequest* pIRequest;
HRESULT hr = pIUnk->QueryInterface(IID_IRequest, reinterpret_cast<LPVOID*>(&pIRequest));
Long m_lDataSize;
HRESULT hr = pIRequest->get_TotalBytes(&m_lDataSize);
if (FAILED(hr))
return hr;
if (m_lDataSize == 0L)
{
return S_OK;
}

COleVariant varBytesToRead;
COleSafeArray sarrayBytes;
varBytesToRead = m_lDataSize;
sarrayBytes.CreateOneDim(VT_UI1, m_lDataSize);
hr = pIRequest->BinaryRead(&varBytesToRead, &sarrayBytes);
if (FAILED(hr))
{
sarrayBytes.Clear();
return hr;
}

5.對于不定個數參數,可使用SAFEARRAY,但使用方法較為復雜。可以在參數中輸入如下的內容[in]SAFEARRAY array,并按Attribute…按鈕,在Name中選擇vararg。按確定后修改idl文件在把[in]SAFEARRAY array改為[in]SAFEARRAY(VARIANT) array。然后再打開MyComponent.h文件把該函數的參數SAFEARRAY array改為SAFEARRAY* array。再打開MyComponent.cpp文件修改參數,在函數體內使用COleSafeArray類實現該參數的控制,如“COleSafeArray SArray(array,VT_BSTR)”,具體操作可查閱MSDN中的該類的成員函數。
四、添加接口屬性
在ClassView中,右擊ImyComponent,在出現的菜單中按Add Property。如圖,在Property中可選擇屬性類型如float,在下面可寫上屬性名如MyFloat。保持其他不變。這里需要說明的是在生成的put_MyFloat和get_MyFloat函數體中的書寫。
::點擊圖片在新窗口中打開::
不妨舉個小例:
1.在CMyComponent 中添加成員變量m_myFloat
2.在put_MyFloat 中寫上:m_myFloat=newVal;
3.在get_MyFloat中寫上:*pVal=m_myFloat
有成員變量也是它優于ISAPI的一個地方,在ISAPI中要在網頁間傳遞信息,只能通過URL參數或者是Cookie來實現,因為每次調用都是一次新的鏈接,無法在網頁之間仍然是同一次調用DLL,所以設置成員變量意義不大,只在一次調用中有用。而那兩種方法都只能傳遞很有限的字符,除非利用創建服務器端臨時文件(此方法很不好)。再說,ASP中的Session對象本身就是很好的存儲信息的對象。
至此,我們創建了一個非常簡單的沒有什么功能的ASP組件,意在說明如何制作。下面,我們書寫一個簡單的ASP網頁,來看看如何使用。網頁如下:
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%
Set Obj=Server.CreateObject("MyStudio.MyComponent")
j=Obj.InitMyComp(5)
Response.Write(j)
%>
<p>
<%
Obj.MyFloat=3.9
j=Obj.MyFloat
Response.Write(j)
%>
<p>
<%
str1="abcd"
str2=Obj.StrConv(str1)
Response.Write(str2)
%>
</BODY>
</HTML>
顯示結果為:
5
3.9
abc
也許,你現在還看不到編寫ASP組件的巨大魅力。但是,如果你正在編寫搜索引擎,文件上傳,自動回復,等等的高級網頁制作,你若能夠充分的利用VC++的優越編程手段,就不必在CGI,ISAPI中苦苦掙扎,可以比較方便的編寫這些功能。比方說用戶想在你的網頁上搜索幾個著名新聞網站上當前的重要新聞,你就可以使用ASP組件在后臺實時的打開各網站獲得信息,篩選匹配后顯示給用戶。又比方說,當注冊用戶告知他的email地址,你就可以利用ASP組件自動給新注冊用戶發出確認信函,用最快的方式讓用戶去確認并使注冊成功……其實,你一定還有很多新的想法可以在網頁上得以實現,趕快行動吧。

Feedback

# re: [網頁]+ [ ALT COM AppWizard]  回復  更多評論   

2008-01-02 17:57 by lhj5168
ok

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久| 亚洲欧美国产毛片在线| 亚洲最新视频在线| 亚洲欧美综合v| 亚洲色图自拍| 免费久久精品视频| 亚洲精品一区在线| 亚洲狠狠丁香婷婷综合久久久| 国产欧美精品在线播放| 国产精品视频精品| 亚洲区一区二| 亚洲国产精品女人久久久| 久久国产精品一区二区三区| 久久精品国产久精国产一老狼| 欧美成年视频| av成人黄色| 久久九九久精品国产免费直播| 六月天综合网| 在线午夜精品| 亚洲激情偷拍| 亚洲欧美视频在线观看| 欧美好吊妞视频| 91久久精品国产91性色tv| 久久超碰97中文字幕| 宅男噜噜噜66一区二区 | 欧美视频一区| 亚洲欧美日韩久久精品| 欧美精品v国产精品v日韩精品| 欧美日韩一区二区三区免费看 | 久久九九精品| 欧美日韩一区二区在线观看 | 国产三级欧美三级| 亚洲国产精品第一区二区三区| 亚洲无线视频| 欧美黄色影院| 久久久久国产成人精品亚洲午夜| 欧美日韩一区二区三区在线看| 在线播放国产一区中文字幕剧情欧美| 亚洲欧洲精品一区二区| 欧美一区二区三区在线观看| 亚洲国产精品一区| 久久色在线观看| 国模大胆一区二区三区| 性做久久久久久久免费看| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲一级黄色av| 欧美日韩国产黄| 亚洲精品欧洲| 亚洲第一中文字幕在线观看| 久久精品一区二区三区四区 | 亚洲免费影视| 亚洲精品国产精品国自产观看浪潮| 久久爱www久久做| 夜夜嗨av色一区二区不卡| 免费在线成人| 91久久精品国产91久久性色| 久久久久青草大香线综合精品| 在线综合亚洲欧美在线视频| 欧美精品一区二区久久婷婷| 影音先锋久久| 欧美成人免费小视频| 国产精品实拍| 亚洲欧美国产一区二区三区| 一本色道久久精品| 欧美91大片| 亚洲人久久久| 日韩一区二区精品葵司在线| 欧美体内she精视频在线观看| 亚洲一级黄色片| 欧美一区二区三区另类| 亚洲黄色免费网站| 日韩亚洲一区在线播放| 国产日本欧美视频| 欧美一区二区私人影院日本| 欧美韩国日本综合| 亚洲美女网站| 日韩亚洲不卡在线| 蜜桃av一区二区三区| 久久本道综合色狠狠五月| 国产乱码精品一区二区三区av| 亚洲成人在线视频播放 | 亚洲美女在线国产| 亚洲国产精品女人久久久| 欧美国产第一页| 一区二区av在线| 亚洲一区二区三区视频| 亚洲精品久久久久久久久| 欧美大片免费久久精品三p | 亚洲午夜一区| 久久久久综合网| 在线一区二区三区四区五区| 一二三区精品福利视频| 99亚洲视频| 久久九九精品99国产精品| 欧美黄色影院| 亚洲美女在线看| 一区二区三区.www| 欧美日韩国产探花| 亚洲九九精品| 午夜日韩福利| 国产欧美日韩免费看aⅴ视频| 在线一区二区三区做爰视频网站| 亚洲午夜电影网| 国产精品v欧美精品∨日韩| 一区二区三区**美女毛片| 亚洲永久精品国产| 国产精品你懂的在线| 亚洲免费视频在线观看| 欧美一区二区三区的| 国产亚洲综合性久久久影院| 欧美亚洲一区二区在线观看| 久久久国产精品一区| 亚洲第一综合天堂另类专| 噜噜爱69成人精品| 亚洲乱码国产乱码精品精98午夜| 亚洲一区二区三区久久| 国产精品久久久久久久久久久久| 亚洲午夜一区二区三区| 久久久国产亚洲精品| 91久久精品www人人做人人爽 | 欧美成人情趣视频| 99在线精品视频在线观看| 亚洲欧美日韩一区二区在线 | 亚洲第一精品福利| 中文精品一区二区三区| 国产日韩精品视频一区| 免费欧美日韩| 久久精品中文| 亚洲精品美女在线观看播放| 欧美少妇一区二区| 欧美一区二区三区久久精品茉莉花 | 午夜欧美精品| 亚洲第一精品夜夜躁人人躁| 久久精品一区四区| 欧美aⅴ一区二区三区视频| 亚洲一区尤物| 欧美日韩免费观看一区二区三区 | 尤妮丝一区二区裸体视频| 黄色成人在线网址| 午夜视频一区| 最近中文字幕mv在线一区二区三区四区| 欧美专区在线观看一区| 国产综合第一页| 99国产精品| 国产精品99久久久久久久vr| 欧美福利一区| 亚洲激情电影在线| 日韩亚洲视频| 欧美激情区在线播放| 欧美福利一区二区三区| 国产伦精品一区二区三区四区免费| 久久精品99久久香蕉国产色戒| 国产区二精品视| 欧美一区二区在线免费播放| 久久久国产一区二区| 久久久久久久一区二区| 香蕉久久夜色精品国产使用方法| 欧美一级久久久| 很黄很黄激情成人| 另类av一区二区| 亚洲一级黄色| 99精品免费视频| 亚洲欧洲在线播放| 黄网站色欧美视频| 国内精品久久久久久久影视麻豆| 国产精品护士白丝一区av| 欧美精品在线观看91| 另类尿喷潮videofree| 欧美影院在线| 亚洲永久免费观看| 亚洲欧美日韩专区| 欧美中文字幕在线| 亚洲免费综合| 欧美日韩国产首页| 欧美成在线观看| 亚洲一区二区三区777| 一二三区精品| 亚洲免费在线看| 香蕉久久国产| 亚洲免费网址| 亚洲伊人网站| 亚洲永久精品大片| 亚洲一区精品视频| 亚洲午夜精品国产| 亚洲一区二区欧美| 午夜精品久久久久久久99水蜜桃 | 国产精品青草久久久久福利99| 欧美日韩国产成人在线免费| 欧美日韩第一区| 国产精品xxxxx| 国产精品一二三四区| 国产欧美日韩免费| 国内精品久久久久久久影视蜜臀| 伊人精品在线| 亚洲日本欧美日韩高观看| 中日韩美女免费视频网站在线观看| 亚洲免费黄色| 亚洲欧美精品中文字幕在线| 欧美一区二区视频在线| 美女主播一区|