一个asp调用com组件的问题折腾了好几天了

alidiedie 2003-03-05 08:43:28

我的动态连接库名为 dll4C.dll
对象名为mydll
接口为Imydll
一个接口成员函数 multiply

这个DLL够简练的了吧

详细的你可以看我的idl文件:

// dll4C.idl : IDL source for dll4C.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (dll4C.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(3816A4EF-811E-4256-919C-11C0948C29B9),
dual,
helpstring("Imydll Interface"),
pointer_default(unique)
]
interface Imydll : IDispatch
{
[id(1), helpstring("method multiply")] HRESULT multiply([in] int ifirst,[in] int isecond,[out] int* result);
};

[
uuid(9F9B2442-FDC2-45E0-9E20-FB6CC1F96F13),
version(1.0),
helpstring("dll4C 1.0 Type Library")
]
library DLL4CLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(5306FB3B-1509-4CAD-A989-43DCA0AF28F1),
helpstring("mydll Class")
]
coclass mydll
{
[default] interface Imydll;
};
};

我不会写调用这个组件的asp
我写了一部分的asp文件如下:(哪位高手给补充完整,最关键的部分是如何调用)
<%@ Language=VBScript %>

<html>
<head>
<title>ASP调用COM</title>
</head>
<body>
<font face="宋体">

<FORM NAME="TextCheckbox Example" METHOD="GET" ACTION="text.asp">
<H3>此处演示如何用ASP调用COM组件:</H3>
<p>
<table>

<tr>
<td><font face="宋体">乘数一(必需)</td>
<td><INPUT TYPE="TEXT" NAME="add1" VALUE="" SIZE="20" MAXLENGTH="150"></td>
</tr>
<tr>
<td><font face="宋体">乘数二(必需)</td>
<td><INPUT TYPE="TEXT" NAME="add2" VALUE="" SIZE="20" MAXLENGTH="150"></td>
</tr>
</table>
</p>
<p>
<INPUT TYPE="SUBMIT" VALUE="提交">
<INPUT TYPE="RESET" VALUE="清除表单">
</p>
</form>

<%
'检查是否存在输入信息。
dim add1, add2, sum,add
add1 = Request.QueryString("add1")
add2 = Request.QueryString("add2")
'显示输入的信息。
If ("" = add1) OR ("" = add1) Then
Response.Write "<P>(尚未输入必需的信息。)</P>"
%>

<%Else
On Error Resume Next
Set add = server.CreateObject("dll4C.mydll")

if Err.Number <> 0 then
response.write "call dll4c.mydll failed "
response.clear
end if
'☆★☆★★★★★请在这里补充调用multiply的语句


End If
%>
结果是 <% = sum %>

</body>
</html>

高手们,这个东西,我试了好几天了,一直不会写,都快没信心了

...全文
36 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
_TMG_ 2003-03-19
  • 打赏
  • 举报
回复
对于传地址的参数,只能是 Variant, VC 中怎么定义我就不知道,但是 VB 中如果 ASP 想取回函数的参数,该参数只能是 Variant
alidiedie 2003-03-19
  • 打赏
  • 举报
回复
这个问题我已经搞定了,格式是:
sum = add.multiply(add1,add2)

谢谢各位了。
第一个程序终于通过了。
其实我最关心的问题是asp与com间传递参数的问题,以后再问吧。

alidiedie 2003-03-17
  • 打赏
  • 举报
回复
没试,但我看不是这里的问题
get和query
post对form
是功能相同的吧
其实我的问题在于如何用vc编写的接口(关键是格式),能被vbs调用。
tenflee 2003-03-17
  • 打赏
  • 举报
回复
有没有换个方式试试?把get改为post

'检查是否存在输入信息。
dim add1, add2, sum,add
add1 = Request.form("add1")
add2 = Request.form("add2")
alidiedie 2003-03-17
  • 打赏
  • 举报
回复
算了
这个问题不问了
大家给介绍本atl编程示例的书吧
alidiedie 2003-03-05
  • 打赏
  • 举报
回复
我进行了类型转化,还是不可以
如下:
add.multiply cint(add1),cint(add2),sum

multiply是这样的:

HRESULT multiply([in] int ifirst,[in] int isecond,[out] int* result);

我想用result的指针返回值。
我一直在线等待大虾的解答

cmsoft 2003-03-05
  • 打赏
  • 举报
回复
参数类型不正确当然不行了,还有你的DLL是否有返回值?
alidiedie 2003-03-05
  • 打赏
  • 举报
回复
这样可以吗?
我写了,怎么行不通呢?
我是这样写的
add.multiply(add1,add2,sum)

提示的错误信息是:
错误类型:
Microsoft VBScript 编译器错误 (0x800A0414)
调用子程序时不能使用括号
/myweb/text.asp, line 50, column 27
add.multiply(add1,add2,sum)

我把括号去掉后,没有了出错信息,但是结果sum里面什么也没有。

是不是类型转换的问题呢?
我这里得到 add1,和add2都是字符串,而multiply里参数都是整数。


annkie 2003-03-05
  • 打赏
  • 举报
回复
add.multiply(parameters list)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧