1.尊敬的合作伙伴:您好!
非常感谢您使用微软新闻组技术支持!
关于您提到的ASP.NET无法引用VC写的控件的问题,我想请问您是想在服务器端引用VC控件中的一些功能,还是VC写了一个ActiveX的控件而无法在网页中使用。请您能否详细描述一下您目前遇到的错误。或者是您引用VC控件时遇到的具体错误信息,这样以方便我们能够更好的来帮助您解决问题,谢谢!
2.关于您提到C#与VC写的ActiveX控件进行交互的问题,从您的描述来看,根据我的理解,您是想知道ASP.NET服务器端如何与前台页面中包含的ActiveX控件进行通讯的问题,如果我的理解有误,请指出。
根据我的经验,后台程序与前台ActiveX是没有办法进行直接通讯的,因为它们处于两种不同的机制下面。首先ActiveX的行为或者事件全部是在客户端出发的,而它本身并不具备与服务器端通讯的功能。其次C#编写的ASP.NET完全属于一套Web Application的框架体系,它本身相应客户端的一些请求,然后再做出一些具体的回应动作,而它本身并不具备捕获客户端事件的能力。所以如果直接让ActiveX控件与ASP.NET服务器端的应用程序进行通讯这种方法是没有办法做到的。
因此,根据我的经验,我们可以选者两种方法来实现。首先,我们可以写一些隐藏的字段,来存储ActiveX在客户端所更改的一些信息。比如说可能ActiveX控件中,有些地理信息,用户选择从“北京”改为了“上海”,这个时候我们就可以利用JavaScript来捕获这个事件(具体的捕获方法要视ActiveX控件的具体实现而言),这时候,我们用JavaScript将我们实现设定的一些隐藏字段的信息更改,然后在由一些服务器端控件激发postback事件,将这些值传递到服务器端,然后由服务器端存入数据库。相应的,当服务器段从数据库读取到一些信息,然后将它呈现的客户端的一些隐藏字段中,然后ActiveX控件再从字段中来获取这些信息。
另外一种方法就是我们需要编写自己的HttpListener,监听Http请求,然后进行判断,如果是ActiveX的请求,就通知当前的ASP.NET应用程序来响应这个请求。
希望我的回复对您有所帮助,谢谢!
3.关于您提到的“朋友给我说c#可以实现vc ActiveX控件的接口或者抽象类”,我想请问您这里指的是服务器端还是客户端。首先,如果在服务器端,那么.NET和ActiveX通过COM Interop是可以做交互操作的。就好比我们在服务器端想要从数据库读取数据,并且有一些自定义的需求,这个时候我们可以用C++写一个ActiveX来实现这个功能,然后ASP.NET应用程序中调用这个ActiveX,将数据读取出来。但如我前文提到的,这是一个纯粹的服务器端行为。
而从您当前的需求来看,网页中肯定包含一个ActiveX控件,而这个控件被客户端下载并安装了,这个时候,客户端打开浏览器访问网页,通过网页中内欠的ActiveX控件直接和服务器端交互数据,这个时候ASP.NET就没有办法来捕获这些事件,除非使用JavaScript捕获,然后和ASP.NET通信。
根据我的经验,您朋友提到的可能是第一种交互行为。