進行ATL項目開發的步驟簡單地說有:
一、填入簡單ATL對象。
二、為該對象設置相應的屬性和方法。
下面是一個服務器代碼:
/**************************************************************************
*ATLServer項目
*代碼向導生成
* ATLServer.cpp
****************************************************************************/
// ATLServer.cpp : DLL 導出的實現。
#include "stdafx.h"
#include "resource.h"
// 模塊屬性使 DllMain、DllRegisterServer 和 DllUnregisterServer 為您自動實現
[ module(dll, uuid = "{2A1AAF24-8569-45AF-8F66-C470917963DE}",
name = "ATLServer",
helpstring = "ATLServer 1.0 類型庫",
resource_name = "IDR_ATLSERVER") ]
class CATLServerModule
{
public:
// 重寫 CAtlDllModuleT 成員
/*******************************************************************************
*ATL簡單對象定義文件
*GetAString為屬性
*********************************************************************************/
// Server.h : CServer 的聲明
#pragma once
#include "resource.h" // 主符號
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Windows CE 平臺
/*
(如不提供完全 DCOM 支持的 Windows Mobile 平臺)上無法正確支持單線程 COM 對象。定義 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可強制 ATL 支持創建單線程 COM 對象實現并允許使用其單線程 COM 對象實現。rgs 文件中的線程模型已被設置為“Free”,原因是該模型是非 DCOM Windows CE 平臺支持的唯一線程模型。"
*/
#endif
// IServer
[
object,
uuid("60976CD2-FE03-4A31-B052-B95C44EDF248"),
dual, helpstring("IServer 接口"),
pointer_default(unique)
]
__interface IServer : IDispatch
{
[propget, id(1), helpstring("屬性 GetAString")] HRESULT GetAString([in] BSTR para, [out, retval] BSTR* pVal);
};
// CServer
[
coclass,
default(IServer),
threading(apartment),
vi_progid("ATLServer.Server"),
progid("ATLServer.Server.1"),
version(1.0),
uuid("0986BF80-F906-40FC-A700-5F1040BEBF07"),
helpstring("Server Class")
]
class ATL_NO_VTABLE CServer :
public IServer
{
public:
CServer()
{
}
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
public:
STDMETHOD(get_GetAString)(BSTR para, BSTR* pVal);
};
/******************************************************************************************
*屬性的實現
*CComBSTR自動管理BSTR的內存分配
*******************************************************************************************/
// Server.cpp : CServer 的實現
#include "stdafx.h"
#include "Server.h"
// CServer
STDMETHODIMP CServer::get_GetAString(BSTR para, BSTR* pVal)
{
// TODO: 在此添加實現代碼
CComBSTR sIn(para);
CComBSTR sOut;
sOut=CComBSTR("收到:");
sOut+=sIn;
*pVal=sOut.Detach();
return S_OK;
}