返回列表 发布新帖

简单Com组件的开发和使用

IP属地:四川省成都市
255 0
发表于 2023-5-29 00:58:21 | 查看全部 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
以前在windows服务器上使用过Asp+Com的方式。记录Com组件开发的一些回忆,可能不准确。Com开发关键是参数的传入和传出。字符串使用BSTR,整数long。首先新建一个atl com appwizard工程。参数示例:[in] BSTR parm1,[in] long parm2,[out] BSTR*parm3,[out]long *parm4,[out, retval] long* ret 或 [out, retval] BSTR* retstring. 还可以“add property”,添加属性,将自动添加get_函数。只要在函数中返回对应的值。unicode模式下,字符串使用OLECHAR来定义。
以前在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转换为整数
}

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

908164873@Qq.com

让我们一起寻找开源的乐趣
加入QQ群把ヽ( ̄ω ̄( ̄ω ̄〃)ゝ
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2024 ROOT开源 版权所有 All Rights Reserved. 网站地图|仅供演示|仅供演示
关灯 在本版发帖 官方QQ群 QQ客服返回顶部
快速回复 返回顶部 返回列表