简单Com组件的开发和使用
以前在windows服务器上使用过Asp+Com的方式。记录Com组件开发的一些回忆,可能不准确。使用工具:vc6。
Com开发关键是参数的传入和传出。我只使用了字符串和整数。字符串使用BSTR,整数long。 首先新建一个atl com appwizard工程。 1、插入一个“atl class”。 2、函数的添加,classview模式,右键点击接口名,选择"add method"。举例: 返回值:HRESULT 函数名:自己定义 参数示例:[in] BSTR parm1,[in] long parm2,[out] BSTR*parm3,[out]long *parm4,[out, retval] long* ret 或 [out, retval] BSTR* retstring [in]为传入参数 [out]为传出参数 [out,retval]为返回值,只能一个 确定后,vc6自动生成class中的函数声明: STDMETHOD(函数名)(BSTR parm1,long parm2,BSTR *parm3, long *parm4,long *ret 或 BSTR *retstring); 在idl文件中自动生成: interface 接口名 : IDispatch { [id(顺序号), helpstring("帮助字符串")] 添加的method声明; ..... }; 还可以“add property”,添加属性,将自动添加get_函数。只要在函数中返回对应的值。以后在asp中就可以用"对象.属性"的方式来获取值。 3、BSTR转化为字符串,使用CString最方便: CString str=BSTR串; 如果工程是unicode模式,则可以直接把BSTR作为字符串(OLECHAR *)使用,使用SysStringByteLen(BSTR串)来获取长度。 unicode模式下,字符串使用OLECHAR来定义。字符串转化为整数是_wtoi()。字符串常量加L:L"字符串"。 4、返回值,字符串转化为BSTR 多字节模式: BSTR A2WBSTR(char *); unicode模式: BSTR SysAllocString(OLECHAR *); ...... 6、class实现后,编译并注册com组件(用regsvr32命令)。 7、asp调用com dim obj set obj=Server.CreateObject("文件名.class名") 调用函数: obj.func(参数) 最后 set obj=nothing 8、c语言调用com组件 #import "com文件名.dll" no_namespace #include "atlbase.h" CLSID comid; CLSIDFromProgID(OLESTR("文件名.class名"),&comid); CComPtr pfunc; pfunc.CoCreateInstance(comid); _variant_t a=pfunc->函数(参数); if(a.vt != VT_NULL){ ret=_ttoi((LPCTSTR)(_bstr_t)a); //ret转换为整数 }
你可能想看: