VC2017下开发ATL程序注意事项
kagula
2019-4-29
阅读对象
早期做过ATL 项目开发的C++程序员.
环境
Windows10 Pro, Visual studio 2017/Visual studio 2019, IE11, C++ ATL x86项目.
正文
VC2017相对于VC2013对ATL开发不是很方便, 因为不支持为ATL Simple Object自动添加function.
不过手动添加member function也挺简单的, 只要三个步骤就OK了.
本文应该也适用于从VC2013过渡到VC2019的C++ ATL程序员.
假设你已经通过VC2017的wizard添加了名为ZT410的ATL Simple Object.
第一步: 在idl文件中定义外部接口
interface IZT410 : IDispatch
{
HRESULT print([in]BSTR templateName, [in]VARIANT* arrContent, [out, retval]long *result);
HRESULT sayHello([in]BSTR msg, [out,retval]BSTR *result);
};
通过wizard建立ZT410后, wizard还会为你自动生成IZT410(接口)代码.
我为这个接口添加了print和sayHello方法, 用来演示ATL参数如何传递.
第二步: ZT410 Class中添加方法定义
打开ZT410.h找到CZT410 class的声明, 在public后面添加print和sayHello的方法声明
public:
STDMETHODIMP print(BSTR templateName, VARIANT* arrContent, long *result);
STDMETHODIMP sayHello(BSTR msg, BSTR *result);
第三步(最后一步)
打开ZT410.cpp, 在里面添加这两个member function的实现
STDMETHODIMP CZT410::print(BSTR templateName, VARIANT* arrContent, long *result)
STDMETHODIMP CZT410::sayHello(BSTR msg, BSTR *result)
{
using namespace std;
wstring head = L"收到来自JavaScript的信息=>";
wstring content = head +