进行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;
}