• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

SAUCER!紧急求助,高人请进!UP有分!

rqxiang 2003-08-29 04:03:59
现在遇到这么个难题:项目是B/S结构(ASP.NET+C#),
用VC.NET的ATL作个OCX控件,其中有个方法接受C#传入的参数并返回到C#代码中一个返回值(或字符串),在调用的过程中,在C#工程(服务器端)中引用但在页面调用OCX方法时无法向OCX传参.我试用JS(浏览器端)调用OCX的方法,但在C#工程中就无法引用,编译出现致命错误(ComException)!该如何解决?如果能写个简单的Demo就最好了!
我的目的是:让OCX自动从服务器端下载并安装到浏览器端
我猜测是否在C#代码中能成功调用的OCX控件就不能在象
JS这样的浏览器端脚本里调用?
该OCX无界面,只实现方法功能!另外:SAUCER老兄,我的OCX不是STA,在ATL里做的是单元线程!
...全文
6 点赞 收藏 22
写回复
22 条回复
panyee 2003年08月30日
我做过类似的东东, aspx页面有两ocx控件, 进入页面时, 服务端默认会写些参数给客户端

客户端完全用javascript来控制控件运行, 之后通过xmlhttp的方式把内容传给服务器, 之后还要进行server与client的交流

附上代码例子, 讨论一下

<html>
<body>
<script language="javascript">
var url = "<%=strUrl%>";
function window.onload()
{
var strOldFile = "c:\\<%=strGuid%>.ext";
strResult = GetFileFromServer(...参数...);//通过xmlhttp方式从服务器获取文件的内容,
var str = DownFile.WriteFile(strOldFile, strResult); //文件操作控件把文件内容写到新文件名里
try
{
var iRet = Sea.Method1(strOldFile, .....参数);//Sea控件一方法, 与客户端有交互
if(iRet != 0)
{
DownFile.KillFile(strOldFile);//文件操作控件后台执行删除操作
alert("xxxxx有错");
}
else
{
//成功
url = "Upload.asp?sessionid=<%=strSessionID%>";//接收文件的服务端asp文件
var strNewFile = Sea.outFileName; //Method1成功后取得控件某属性
var strSea = Sea.otherName; //控件另一属性
//Upload的功能是把加密后的文件以ado.stream+xmlhttp的方式上传到服务器
//document.all("hidFile").value = sResult;服务端把上传后的新文件名传回给客户端, 把这个值放在hidFile域里
if(Upload(strNewFile, url))
{
//发xml包,去重新构建新的xml文件
url = "cmdSend.aspx?sessionid=<%=strSessionID%>";
var strXml = "<param><action>sealfile</action>";
strXml += "<biaoshi><%=strbiaoshi%></biaoshi>";
strXml += "<ID><%=strID%></ID>";
strXml += "<Zhengwen>" + document.all("hidFile").value + "</Zhengwen>";
strXml += "</param>";
//以xmlhttp方式发送数据包给服务器, 对此次操作进行注册
var strRet = ExecServerPrgm(url, "POST", "param=" + escape(strXml));
if(strRet == "-1" || strRet == "")
{
alert("xxxx失败!");
return;
}
if(strRet == "TRUE")
{
alert("xxx成功!");
parent.location.href = "xxxxxxx.aspx";
}
}

}
}
catch(e)
{

}
}

</script>
<body>
<OBJECT id="Sed" height="0" width="0" classid="CLSID:xxxxxxxxxxxxxx" VIEWASTEXT>
</OBJECT>
<OBJECT id="DownFile" codeBase="./cabs/xxxxxx.cab#version=6,8,0,7" classid="clsid:xxxxxxxx" VIEWASTEXT>
</OBJECT>
<input type="hidden" id="hidFile" value="">
</body>
回复 点赞
rqxiang 2003年08月30日
我得OCX就是不可见的!
回复 点赞
rqxiang 2003年08月30日
To:BenZ004(仲陵)
回复 点赞
ufo80 2003年08月30日
up
回复 点赞
rqxiang 2003年08月30日
那我该怎么办?项目是Asp.NET,别人的页面全是Asp.NET做好了,就等我的OCX了,就没有别的解决方法了?郁闷!!再想想!!!
回复 点赞
gweidian 2003年08月30日
UP
回复 点赞
MSNETFANS 2003年08月30日
UP
回复 点赞
BenZ004 2003年08月29日
如思归后面说的
用隐藏控件hidden input来存放那个值
我用过这个,不过不是用来解决ocx的。
回复 点赞
BenZ004 2003年08月29日
UP一下再仔细看~:)
回复 点赞
saucer 2003年08月29日
it is an ocx, it is supposed to run at the client side. Do you understand the differnce between the client side and server side?

>>>其中有个方法接受C#传入的参数并返回到C#代码中一个返回值(或字符串)

call the method on the client side in javascript, save the return value in a hidden input control and submit the form back to the server side
回复 点赞
alphawin 2003年08月29日
up
回复 点赞
leal 2003年08月29日
那用js调用ocx的方法,再用js将返回值返回到服务器的cs中,可行吗?
回复 点赞
xiongliang2003 2003年08月29日
学习下
回复 点赞
xiongliang2003 2003年08月29日
学习下
回复 点赞
lwgj 2003年08月29日
up
回复 点赞
loulanlouzhu 2003年08月29日
听听!
回复 点赞
rqxiang 2003年08月29日
难道就没有办法了吗?C#代码是在服务器端编译,编译后是以Js脚本发送到浏览器端的,他不也是<Object>的形式发送的吗?理论上应该可以阿?再想想!!!
回复 点赞
panyee 2003年08月29日
不能, 只能用js来设置,调用ocx的方法
ocx以<object>的形式嵌入在aspx页面

在aspx.cs页面是不让访问的

因为ocx运行于客户端, .cs运行于服务端
回复 点赞
leal 2003年08月29日
在c#代码里无法向ocx传参吗?
用js向c#代码传返回值可以吗?
回复 点赞
rqxiang 2003年08月29日
来个牛人!
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告