简单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转换为整数

 }




© time.org.cn