首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

ATL COM 組件中存取 ASP 內建物件完整實戰指南

     編輯:關於VC++

背景與動機

在 ASP 經典開發時代,為了解決腳本語言效能低、維護困難的問題,常見做法是將商業邏輯封裝為 COM 組件。本文詳細示範如何使用 ATL 建立支援 ASP 內建物件的 COM 組件。

專案建立步驟

1. 建立 ATL 專案

  • 專案名稱:ASPCOM
  • 伺服器類型:Dynamic Link Library (DLL)
  • 屬性化:不勾選(便於查看實作碼)
  • 合併 Proxy/Stub:勾選
  • 支援 MFC:不勾選
  • 支援 COM+:不勾選

ATL 專案建立精靈 - 應用程式設定 ATL 專案屬性設定

2. 加入 ASP 元件類別

  • 選擇 ATL Active Server Page Component
  • 類別名稱:MyTest
  • 介面選項:採用預設值
  • ASP 內建物件:全部勾選(Request, Response, Session, Application, Server, ObjectContext)

加入 ATL ASP 元件 ASP 元件選項設定

精靈自動產生的基礎架構

ATL 精靈會自動處理 OnStartPage 與 OnEndPage 事件,完成 ASP 內建物件介面指標的獲取與釋放:

類別檢視與實作碼

實作自訂方法:存取 Request 與 Response

STDMETHODIMP CMyTest::TestASPComp(void)
{
    CComPtr<IRequestDictionary> pDict = NULL;
    HRESULT hr = S_OK;
    _bstr_t str;
    
    try {
        // 從 Request 物件獲取 Form 集合
        hr = m_piRequest->get_Form(&pDict);
        if (FAILED(hr)) return hr;
        
        // 讀取表單欄位值
        hr = GetDictItemValue(pDict, L"Name", str);
        if (FAILED(hr)) _com_issue_errorex(hr, pDict, __uuidof(IRequestDictionary));
        
        // 輸出至 Response
        m_piResponse->Write(_variant_t(L"Name="));
        m_piResponse->Write(_variant_t(str));
        
        // 讀取第二個欄位
        hr = GetDictItemValue(pDict, L"Message", str);
        if (FAILED(hr)) _com_issue_errorex(hr, pDict, __uuidof(IRequestDictionary));
        
        m_piResponse->Write(_variant_t(L"<br>\nMessage="));
        m_piResponse->Write(_variant_t(str));
    }
    catch (_com_error e) {
        return e.Error();
    }
    
    return S_OK;
}

客戶端測試頁面

form.htm - 表單提交頁

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ASP COM Component Test</title>
</head>
<body>
<form name="form" method="post" action="show.asp">
<table>
<tr><td>Name:</td><td><input name="Name" type="text" id="Name"></td></tr>
<tr><td>Message:</td><td><input name="Message" type="text" id="Message"></td></tr>
<tr><td></td><td><input type="submit" value="Submit"></td></tr>
</table>
</form>
</body>
</html>

show.asp - 組件呼叫頁

<%@LANGUAGE="JSCRIPT" CODEPAGE="65001"%>
<%
function TestComponent() {
    try {
        var obj = new ActiveXObject("ASPCOM.MyTest");
        obj.TestASPComp();
        delete obj;
    }
    catch(e) {
        Response.Write("Error " + (e.Number & 0xFFFF));
        Response.Write(" - " + e.Description);
    }
}
%>
<html>
<head><title>Result</title></head>
<body>
<% TestComponent(); %>
</body>
</html>

執行結果展示

form.htm 執行畫面 show.asp 執行結果

測試環境

  • Windows 2003 Server
  • VC.NET 2003
  • IIS 6.0

總結

ATL 精靈大幅簡化了 ASP COM 組件的開發流程,自動處理內建物件的生命週期管理。開發者只需專注於商業邏輯實作,即可獲得高效能、易維護的伺服端元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved