手机站
网通分站
电信主站
密 码:
用户名:
热门关键字:  虚拟主机  cn域名  asd  ddd  域名注册
当前位置 : 主页>网络编程>Asp编程>列表

ASP与ActiveX控件交互实战

来源:互联网 作者:west263.com 时间:2008-02-23 点击:
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


使用Microsoft ActiveX Control Pad这个工具,可以很容易找到.

直接用这个工具把测试页打开.

菜单->Edit->Edit Activex Control,呵呵,打开了一个可视化的界面.

看到了吧,有一个属性框,我们可以进行设置,设置完成以后的代码如下:

<HTML>

<HEAD>

<TITLE>New Page</TITLE>

</HEAD>

<BODY>

<OBJECT ID="GetClient" WIDTH=507 HEIGHT=440

CLASSID="CLSID:890D1028-298B-45CF-9A64-6ED5A5BACBC9"

CODEBASE="http://localhost/xml/fOcx.ocx">

<PARAM NAME="_ExtentX" VALUE="13414">

<PARAM NAME="_ExtentY" VALUE="11642">

<PARAM NAME="GetInfo" VALUE="这是ocx得到的客户端读卡器的信息">

</OBJECT>

</BODY>

</HTML>

增加了ID,ID就是我们用来访问的标志.还有我们的属性GetInfo,我们也设定初始值了

好了,运行.

Text中就出现了我们设定的值”这是ocx得到的客户端读卡器的信息”

我们把上边的页面改成asp的,看代码:

<HTML>

<HEAD>

<TITLE>龙卷风测试页</TITLE>

</HEAD>

<BODY>

<%

dim sValue

sValue="这是ocx得到的客户端读卡器的信息"

%>

<OBJECT ID="GetClient" WIDTH=507 HEIGHT=440

CLASSID="CLSID:56DFCA88-F5B8-4879-853B-97FE504423FD"

CODEBASE="http://localhost/xml/fOcx.ocx">

<PARAM NAME="_ExtentX" VALUE="13414">

<PARAM NAME="_ExtentY" VALUE="11642">

<PARAM NAME="GetInfo" VALUE="<%=sValue%>">

</OBJECT>

</BODY>

</HTML>

OK,运行即可

我们看看第二种情况

运行时得到数据


<HTML>

<HEAD>

<TITLE>龙卷风测试页</TITLE>


<%

dim sValue

sValue="这是ocx得到的客户端读卡器的信息"

%>

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>

<!--

function button1_onclick()

{

GetClient.GetInfo='<%=sValue%>';

}

//-->

</SCRIPT>

</HEAD>

<BODY>

<OBJECT ID="GetClient" WIDTH=507 HEIGHT=440

CLASSID="CLSID:56DFCA88-F5B8-4879-853B-97FE504423FD"

CODEBASE="http://localhost/xml/fOcx.ocx">

<PARAM NAME="_ExtentX" VALUE="13414">

<PARAM NAME="_ExtentY" VALUE="11642">

</OBJECT>

<INPUT id=button1 type=button value=Button name=button1 LANGUAGE=javascript onclick="return button1_onclick()">

</BODY>

</HTML>

运行后,点击按钮即可看到效果.
问题提出:

ActiveX控件得到客户端的信息,如何传递到服务端???

一种方法就是得到值后,使用Get,Post方式提交,这可能也是最常用的.

有没有更好一些的方法呢?

能不能在控件中直接向服务器发出请求而得到数据呢?



打开vb6,新建ActiveX控件工程。

工程名:fOcx,用户控件名:UC3

添加1个按钮,2个文本框

代码如下:

Option Explicit

Private Sub Command1_Click()

'注意字符串和数字的写法有些区别

'使用AsyncRead通过HTTP发送你的请求

UserControl.AsyncRead "http://yang/xml/activex.asp?s1=" & Text1.Text & "", vbAsyncTypeByteArray

UserControl.AsyncRead "http://yang/xml/activex.asp?s1=" & Text1.Text, vbAsyncTypeByteArray

End Sub

'AsyncReadComplete 事件用来从asp页面接受和分析。

'当容器刚完成一个异步读取请求时 , 发生该事件?

'AsyncProp 中的数值指定了已完成的某个异步数据读取请求,

'它与前一个 AsyncRead 方法调用中的数据匹配。

'AsyncReadComplete 事件过程中应包含错误处理代码,因为错误状态会终止下载。

'如果发生了这种情况,当访问 AsyncProperty 对象的 Value 属性时将会发生错误。

Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)

On Error GoTo errhandle

Text2.Text = ByteArrayToString(AsyncProp.Value)

errhandle:

Err.Raise 601, "异步读取发生了错误", Err.Description

End Sub

'将字节数组转换成字符串

Public Function ByteArrayToString(bytArray() As Byte) As String

Dim sAns As String

sAns = StrConv(bytArray, vbUnicode)

ByteArrayToString = sAns

End Function

我们来看看http://yang/xml/activex.asp这个文件

<%

dim str

str=request("s1")

if str="name" then

response.write ("龙卷风")

elseif str="age" then

response.write ("26")

else

response.write ("没有可用信息返回")

end if

%>

很简单,使用request接受参数,response返回。



这个例子可以进一步处理,将服务器名以属性的方式传递给控件。

比如:<PARAM NAME="ServerName" VALUE="192.168.0.1 ">

然后在程序中得到,就可以使用了,如:

UserControl.AsyncRead "http://192.168.0.1/xml/activex.asp?s1=" & Text1.Text & "", vbAsyncTypeByteArray

然后在程序中得到就可以灵活处理了。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

共2页: 上一页 [1] 2 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名
注册