随笔 - 49  文章 - 2  评论 - 383 

    在我的第一篇blog发表之后,得到大家的支持,我的工作得到了认可,感到很开心。当然,很多朋友也提出了很多出色的见地。我想在这里说明一下我对这些问题的理解。 
  
    我所完成的控件是一个用来获取客户端摄像头图片并保存在特殊文件夹里,然后上传到服务器的ActiveX控件。给大家一个截图。 显示图片的就是那个控件。


    之所以当初想到用C#写ActiveX控件,一是自己不会用VB/C++写ActiveX控件,二是由于简单的WinForm控件由于.net安全性的限制,无法在客户端实现复杂的操作。因为ActiveX控件是以本地用户的身份运行,所以可以突破.net安全性的限制。而这才是《用C#编写ActiveX控件》的真正优势所在。
    
    其实用C#写ActiveX控件的原理很简单,就是使用了.net平台和COM的互操作性。在我的《用C#编写ActiveX控件》中,修改项目属性的目的就是将.net控件注册为ActiveX控件。这样,你就可以把这个控件完全当作ActiveX控件来对待了。比如,可以使用JS和VBS来调用,也可以使用C++来调用。唯一的遗憾,就是这样的ActiveX控件需要客户端安装.net framework。

    由于最近比较忙,一是四六级考试,二是快要期末考了,所以那篇文章一直没有写完。在四六级考试之后,我一定把文章补充完整。

红马天下 版权所有
博客:http://homer.cnblogs.com/
欢迎转载,但转载必须注明作者和出处。

posted on 2005-01-06 15:46 红马天下 阅读(10882) 评论(41)  编辑 收藏

  回复  引用    
2005-01-06 15:51 | 狼军团长 [未注册用户]
不知道,你的activex控件如何发布?你的颜色太恐怖了,呵呵,祝你考试顺利
  回复  引用  查看    
2005-01-06 17:10 | kwklover      
这样的ActiveX控件的应用范围会受到限制,毕竟目前很多PC都没有安装.net frameworks,但将来会改善的

所以对你这个POST很感兴趣

@狼军团长提出的如何发布activex控件的问题也感兴趣,不知道下篇POST会否包含这方面的内容呢 ?很期待哦!!

祝你通过考试!!
  回复  引用  查看    
2005-01-06 18:42 | 小李菜刀      
我感觉这不是真正的ActiveX,他能在Word中插入么?能在其它支持嵌入ActiveX的程序中正确运行么?
  回复  引用    
2005-01-06 20:27 | ultrabar [未注册用户]
这不应该叫做active,只能说是.net组件?
  回复  引用  查看    
2005-01-07 04:37 | Ying-Shen      
>>> 其实用C#写ActiveX控件的原理很简单,就是使用了.net平台和COM的互操作性。

在CodeProject上也有一些类似的文章教如何把Winform UserControl改成ActiveX 控件。
这样做有一定的技术风险的,因为Winform UserControl没有实现和ActiveX控件的完全兼容性。
Winform Dev Team的回答是说一开始是想做成全兼容的,
但是后来遇到很多问题就把这个特性去掉了,所以现在的Winform控件
只有部分的ActiveX控件兼容性。。。 :)

对于你的应用而言你,你其实只需要IE Host winform user control就足够了。
至于访问本地文件等等问题,这和配置code access security就可以了,即使你按照ActiveX的方式创建仍然无法躲过CAS的检查的。

  回复  引用  查看    
2005-01-07 09:09 | 红马天下      

To Ying-Shen :

    你的担心是没有必要的。实际上这篇文章是我在成功完成自己的项目后和大家交流体会。在我的项目中,实现了一个ActiveX控件,可以从客户端的摄像头中取图片,保存在特殊的文件夹里,然后通过IE上传上去。下面是截图:
显示图片的地方就是我写的控件,如图所示,使用了3个html按钮实现了播放、停止以及截图。当然,按钮后面实际上是用的Javascript控制的。

  回复  引用  查看    
2005-01-07 09:23 | 寒星      
用.Net来写ActiveX意义不大,无法真正发挥ActiveX的优势。:p
  回复  引用  查看    
2005-01-07 11:01 | lay      
准确点不该叫ActiveX,如果装框架,那还不如用个瘦客户端的WINFORM程序,当然,如果大家都用WIN2003的话,这个到可以忽略了:)
  回复  引用  查看    
2005-01-07 11:13 | 寒星      
lay说出了问题所在。之所以,我认为用.Net开发ActiveX没有什么实际的意义,就是因为,不可能客户端的OS都是win2003或后续的Longhorn。而且,在大多数企业中,客户端机器的配置都是相当低的。
  回复  引用  查看    
2005-01-07 15:19 | 红马天下      
但如果你是在一个用.net开发的B/S项目中,并且只有一个功能必须访问本地资源,你是选择用个瘦客户端的WINFORM程序来实现,还是像我一样选择选择用.net开发ActiveX控件?当然如果你精于使用VB/C++来开发ActiveX,那就另当别论了。
  回复  引用  查看    
2005-01-08 23:23 | 小李菜刀      
当然会是使用Delphi或者VC来开发ActiveX了!
既然是B/S程序,那么B/S程序最在的优势是什么?使用C#做的,客户端必须安装相应的Framework才可以。如果客户端都安装了Framework了,那B/S就丧失了他的最大优势。

  回复  引用    
2005-01-09 08:46 | hello [未注册用户]
我觉得,用什么工具没有什么原则上的限制,关键是能解决实际应用中的问题。所以说,“只要逮着老鼠就是好猫”。我也期待着楼主继续。
  回复  引用  查看    
2005-01-09 15:13 | 红马天下      
其实我觉得要安装Framework并不是很大的问题。现在不是有很多网页使用了Applet吗?那还不是要安装Java虚拟机?
  回复  引用    
2005-01-09 21:03 | 狼军团长 [未注册用户]
什么时候,能谈谈发布的问题呀
  回复  引用  查看    
2005-01-10 09:31 | 红马天下      
不好意思,这两天我会把发布的部分整理出来。:)
  回复  引用    
2005-07-08 22:42 | 蓝衣紫痕 [未注册用户]
对红马天下十分佩服....才大三,就这么牛...
看了这么多评论,用C#做一个ActiveX控件失去了B/S模式的优势.
毕竟不会每台机器都会装有Framework,除了我们这些人以外,
还是用C++之类的写好一些.
唉,都不知道自己该说些什么,BS自己.
  回复  引用    
2005-07-14 21:48 | PingYJ [未注册用户]
我佩服
  回复  引用    
2005-07-30 17:44 | 阿游 [未注册用户]
lay说“用个瘦客户端的WINFORM程序”,一看就是个外行,竟然下面还有人追捧,我觉得楼主的确很不错,虽然这些东西也可以在MSDN中看到,但毕竟是中文资料,这对技术的推广有很大的帮助,我已经顺利的通过楼主的方法实现了自己的控件,不过使用的是VB.net编程语言,毋庸置疑的感谢。至于.net框架的问题,我想不必担心,vista的beta1已经证明了一切,新一代带系统API(WinFX)的诞生也有利的证明了这个方向的正确性。一年或两年后,仍然使用旧版操作系统并且不安装WinFX的人就被大家看作另类,就像现在WinXP当道,仍有人用就98的感觉一样,再说,将来大家都用这个开发,微软再搞一个系统补丁什么的,框架的问题就不是问题了。
  回复  引用    
2005-08-15 21:44 | 龙龙 [未注册用户]
我也试了一下,不行,显示的就和这个内容的文本域一样的东西,里面也没有文字。谁能解释一下呀?谢谢了。
  回复  引用    
2005-10-10 14:59 | globeh [未注册用户]
在那里可以看到《用C#编写ActiveX控件》
  回复  引用    
2005-10-12 10:48 | lj [未注册用户]
我按照楼主的例子做了一边,可只能在我本机上运行.我在HelloWord项目的AssemblyInfo.cs中加上了[assembly : AllowPartiallyTrustedCallers()] 了,为什么不行能,请楼主帮个忙,谢谢!

  回复  引用  查看    
2005-11-02 16:49 | freeman      
lj :
1 添加命名空间using System.Security;
2 如果需要在另外一台机器运行,需要更改你的HTML文件,将localhost更改为ip地址。
  回复  引用    
2005-11-29 13:52 | 闲云孤鹤 [未注册用户]
我按照楼主的方法成功的制作了ActiveX控件,并试验自己创建了ActiveX控件的属性,方法和事件。在IE中进行测试,属性和方法一切正常。但ActiveX控件的事件始终未测试通过。

我在控件中添加如下代码:

// 声明委托类型
public delegate void ClickHandler();
// 声明委托实例
private ClickHandler ClickEvent;

// 声明控件的事件属性
public event ClickHandler OnClickButton
{
add
{
ClickEvent += value;
}
remove
{
ClickEvent -= value;
}
}

// 在控件中按钮控件的点击事件中添加如下事件点燃代码
private void btn_SignIn_Click(object sender, EventArgs e)
{
if (ClickEvent != null)
{
Invoke(ClickEvent);
}
}

在html文件中添加事件响应代码:
<script language='javascript' for='MyControl' event='OnClickButton()'>
alert("ss");
</script>


但是反复测试无法激活alert代码。

不知道楼主是否自己试验过。
  回复  引用    
2006-04-06 16:08 | Linxiao [未注册用户]
闲云孤鹤 你后来把event弄成功了没有?
  回复  引用  查看    
2006-04-08 11:40 | S.Sams      
C# ActiveX 如何和Javascript通讯
即如何调用Javascript的函数!
  回复  引用    
2006-06-19 19:30 | 虚拟主机 [未注册用户]
我看了《用C#编写ActiveX控件》觉得写得挺不错的
  回复  引用    
2006-09-23 02:06 | 流星拳 [未注册用户]
一群SB, 一味的追逐新技术, 等到所有的人都用上具有 .NET框架的系统的系统,可能吗? 如果真有那么一天也是10多年以后的事了, 你们学编程为了什么!就你们这么个搞法,永远都是个代码工人
  回复  引用    
2006-10-19 11:16 | fly[匿名] [未注册用户]
流星拳才是一个地地道道的SB,你以为做web开发就只有在互联网上应用这一个途径吗?你不知道还能做企业应用?在企业里要求每个客户端安装.NET框架那是轻而易举的事,况且在操作系统升级过程中就可以完成框架的安装。而且,用.net做ActiveX又有它自己的优势,比如访问webServer,操作Xml,用VB来做这些工作太麻烦了。
  回复  引用    
2007-05-07 09:27 | 疑问者 [未注册用户]
为何我用vs2005做的,在IE页面上只显示一个类似areatext样子的东西,不显示出组件来?
  回复  引用    
2007-05-24 22:32 | 卡卡 [未注册用户]
# re: 关于《用C#编写ActiveX控件》的几点说明
为何我用vs2005做的,在IE页面上只显示一个类似areatext样子的东西,不显示出组件来?
疑问者 评论于 2007-05-07 09:27 回复 更多评论

发现楼主一直未对这个问题回复,不知道为什么?很菜的问题吗?而且好几个人碰到.
  回复  引用    
2007-05-29 18:45 | 卡卡 [未注册用户]
@卡卡
找到了.htm和dll一定要放在同一个目录才可以.


  回复  引用    
2007-05-31 11:16 | 119 [未注册用户]
楼主的东西确实是个好办法,能解决实际问题。
  回复  引用    
2007-06-03 20:32 | 黯然销魂 [未注册用户]
是 LZ无暇顾及卡卡 的问题而已啊。。
卡卡多试试吧。。我之前也不行。。后来试试就行了。。我也不知道怎么回事。
  回复  引用    
2007-06-03 20:33 | 黯然销魂 [未注册用户]
看错了。。原来已经解决了。。呵呵。。
  回复  引用    
2007-08-18 20:28 | lynnrabbit [未注册用户]
客户端都装了.net了,还需要用ActiveX?有点不明白
  回复  引用    
2008-03-14 16:28 | 一介布衣 [未注册用户]
客户端装了framework, 为什么不直接写winform呢.
相比之下ActiveX有什么优势吗?
希望LZ能谈谈感受
  回复  引用    
2008-06-02 15:32 | snakegod [未注册用户]
楼主不过说螃蟹可以煮着吃 而其他人在讨论煮螃蟹遇到的问题。可是为什么有人非要问螃蟹为什么不炸着吃。我的回答是你爱煮着吃就看看。不爱煮着吃就一笑而过,而喷子是让人恶心的东西(注:不是人)
  回复  引用    
2008-07-01 17:04 | 不是人 [未注册用户]
确实,再厉害的人如果喷人也是遭bs的,lz的东西很好。
  回复  引用    
2008-09-02 10:48 | 代码工人 [未注册用户]
客户端装了framework, 为什么不直接写winform呢.
相比之下ActiveX有什么优势吗?
希望LZ能谈谈感受

晕,框架是框架,框架只需要安装一次,
你的程序可不一样,要升级,要修改BUG,那时候 LZ的做法和平常的WIM FORM哪个方便?

不过,用这个,为何不用clickone呢?
  回复  引用    
2008-09-24 13:43 | codehunter [未注册用户]
楼主的方法很好,有实用价值:
对于项目的过渡期可以使用此技术,比如项目以前并非使用.net但
将来要转变到.net上,那么可以将有些界面相关组件用此法实现,
这样即可兼容旧系统,又可为将来转为.net提供代码积累。
很好。。。。。
  回复  引用    
2008-10-10 16:27 | .net 程序员 [未注册用户]
那些挑各种毛病的人,真是自己有病(绝对是嫉妒楼主的才华,非要挑些缺点出来),要是自己觉得不好,你就别用嘛,我觉得作项目时候绝对用的上的(不是说非用它不可)!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-01-07 09:15 编辑过


相关链接: