=========如何做一个组件,可以在IE里调用并执行?=============

pursuer_zhao 2003-08-07 07:45:07
想实现这样一个功能:组件在服务器端,客户端打开IE,点击可以执行组件功能,这样的功能组件如何做?
...全文
8 点赞 收藏 15
写回复
15 条回复
xwsn007 2003年08月11日
用ATL作个asp组件,具体如下:
一、建立工程
打开VC++6.0,选择New Projects中的ALT COM AppWizard, 并输入好工程名(如MyStudio),记住该工程名将成为ASP组件名的一部分(其实可以修改,但很麻烦),在下一页上选择Server Type 为DLL,并可考虑在Support MFC前打勾(想必使用MFC编程的人不少)。按Finish结束。

二、创建COM对象(新建ATL活动模版库类)
在菜单上选择Insert New Class,并新建一个ATL Class,如取名为CmyComponent,你会发现在接口表中出现了一个ImyComponent,以后创建该接口的方法和属性就可以在ASP中使用了。把Aggregatable选项去掉,保持其他不变。

三、添加接口方法
在ClassView中,右击ImyComponent,在出现的菜单中按Add Method。在Method Name中可写上方法名如InitMyComp。在Parameters中写上方法的参数如[in]int Number1,[out,retbal]int* Number2。这里要特别说明的是参数的写法。

1.对于传入的参数必须在参数前加上[in],然后可跟上如int n或float f等。且每个传入参数前都必须写明。
2.对于调用方法的返回,不再是该方法名前的类型(因为所有这些方法都返回HRESULT,即表明是否调用成功),所以使用传出的参数,在参数前必须加上[out,retval],然后可跟上如int* n 或者float* f等(如果返回的是int 或float 类型值时)。且每个方法仅限于返回一个这样的参数。在函数体中可如写上如“*Number2=Number1;”,表示把输入参数作为传出参数。

3.对于最常用的字符串参数应使用BSTR str而不是通常的char* 或CString,所以在参数中需要写作[in]BSTR str 或[out,retval]BSTR* str。需要特别注意与CString的转换。如新建一个函数StrConv([in]BSTR bstr1,[out,retval]BSTR* bstr2),在函数体中可写上如:
CString str;
str=bstr1;
str=str.Left(str.GetLength()-1);
*bstr2=str.AllocSysString();
4.对于想把一个ASP对象作为参数的方法(如Request对象),可以使用[in]Iunkown *pIUnk,在函数体内,可用如下语句:(具体请查阅MSDN中的相关类的内容)
IRequest* pIRequest;
HRESULT hr = pIUnk->QueryInterface(IID_IRequest, reinterpret_cast<LPVOID*>(&pIRequest));
Long m_lDataSize;
HRESULT hr = pIRequest->get_TotalBytes(&m_lDataSize);
if (FAILED(hr))
return hr;
if (m_lDataSize == 0L)
{
return S_OK;
}

COleVariant varBytesToRead;
COleSafeArray sarrayBytes;
varBytesToRead = m_lDataSize;
sarrayBytes.CreateOneDim(VT_UI1, m_lDataSize);
hr = pIRequest->BinaryRead(&varBytesToRead, &sarrayBytes);
if (FAILED(hr))
{
sarrayBytes.Clear();
return hr;
}

5.对于不定个数参数,可使用SAFEARRAY,但使用方法较为复杂。可以在参数中输入如下的内容[in]SAFEARRAY array,并按Attribute…按钮,在Name中选择vararg。按确定后修改idl文件在把[in]SAFEARRAY array改为[in]SAFEARRAY(VARIANT) array。然后再打开MyComponent.h文件把该函数的参数SAFEARRAY array改为SAFEARRAY* array。再打开MyComponent.cpp文件修改参数,在函数体内使用COleSafeArray类实现该参数的控制,如“COleSafeArray SArray(array,VT_BSTR)”,具体操作可查阅MSDN中的该类的成员函数。

四、添加接口属性
在ClassView中,右击ImyComponent,在出现的菜单中按Add Property。如图,在Property中可选择属性类型如float,在下面可写上属性名如MyFloat。保持其他不变。这里需要说明的是在生成的put_MyFloat和get_MyFloat函数体中的书写。

举个小例:
1.在CMyComponent 中添加成员变量m_myFloat
2.在put_MyFloat 中写上:m_myFloat=newVal;
3.在get_MyFloat中写上:*pVal=m_myFloat

有成员变量也是它优于ISAPI的一个地方,在ISAPI中要在网页间传递信息,只能通过URL参数或者是Cookie来实现,因为每次调用都是一次新的链接,无法在网页之间仍然是同一次调用DLL,所以设置成员变量意义不大,只在一次调用中有用。而那两种方法都只能传递很有限的字符,除非利用创建服务器端临时文件(此方法很不好)。再说,ASP中的Session对象本身就是很好的存储信息的对象。


至此,创建了一个非常简单的没有什么功能的ASP组件,意在说明如何制作。
下面,写一个简单的ASP网页,来看看如何使用。网页如下:

<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%
Set Obj=Server.CreateObject("MyStudio.MyComponent")
j=Obj.InitMyComp(5)
Response.Write(j)
%>
<p>
<%
Obj.MyFloat=3.9
j=Obj.MyFloat
Response.Write(j)
%>
<p>
<%
str1="abcd"
str2=Obj.StrConv(str1)
Response.Write(str2)
%>
</BODY>
</HTML>

显示结果为:
5
3.9
abc
回复 点赞
XXandOO 2003年08月10日
使用<OBJECT ... codebase="dll的url路径">
必须是com组件,如activex控件
如果在客户端用,和服务七端无关,静态网页就可以
回复 点赞
policemanmj 2003年08月10日
觉得不需要用什么ASP,直接用ATL开发,我现在做的部分已经可以在IE里被调用,实现的功能是当用户每打开一个网页可以保存到本地机上,还在一步步的加功能
回复 点赞
weijiechen 2003年08月09日
自己编写INF文件,网上资料很多
回复 点赞
aimheliopause 2003年08月08日
regsvr32 xxx.dll or regsvr32 xxx.exe
regsvr32 /u xxx.dll是卸载
regsvr32.exe 市windows自带的
回复 点赞
kingzai 2003年08月08日
you call DllRegisterServer method, if you use installshield ,this support it.
回复 点赞
pursuer_zhao 2003年08月08日
To kingzai(kingzai) :

当在客户端下载后怎么自动注册?

To zhaolaoxin() ;

有没有相关的例子?谢谢!
回复 点赞
zhaolaoxin 2003年08月08日
做成ActiveX控件,用服务器端脚本语言(如ASP)调用。
回复 点赞
kingzai 2003年08月08日
packet this component to CAB or EXE,when client browse with IE,this will download and register this component.then client can use it.
回复 点赞
stcrane1228 2003年08月08日
GZ
回复 点赞
flyycyu 2003年08月08日
做成com,放在服务器器端
当然执行的时候是下载到客户端执行
回复 点赞
LeeZi 2003年08月08日
ASP + COM
回复 点赞
pursuer_zhao 2003年08月08日
谁说说具体如何做?
回复 点赞
feeboby 2003年08月07日
gz
回复 点赞
policemanmj 2003年08月07日
顶一下,我也在做类似的事,组件已经可以被调用了,不过我在加功能的时候调试出问题
回复 点赞
发动态
发帖子
ATL
创建于2007-09-28

3023

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告