主要想实现的功能是浏览器与其他窗体的通讯。用c#做了一个activex。activex的工作流程如下:流程一:
从网页中获取数据封装成对象--->序列化--->由socket发送--->B端的socket收到-->反序列化-->处理流程二:
B端处理完后-->数据封装成对象-->由B端socket发送-->activex端的socket收到--->activex端反序列化失败(错误信息:找不到程序集...)
流程一全部成功。成功将网页里文本框的内容发送给B端的窗体,并显示出来流程二进行到activex端反序列化的时候失败了。还导致IE停止工作
流程一完成了一遍 对数据对象的 序列化和反序列化
这里是不是证明了 两端的包含数据对象的那个程序集的版本信息之类的东西都一致了,
而且两端添加引用的是同一个dll。流程二的时候失败,这是哪里出问题了?流程一最后面的处理就是把收到字符串显示到文本框里而已。然后把数据对象送回activex端。
从网页中获取数据封装成对象--->序列化--->由socket发送--->B端的socket收到-->反序列化-->处理流程二:
B端处理完后-->数据封装成对象-->由B端socket发送-->activex端的socket收到--->activex端反序列化失败(错误信息:找不到程序集...)
流程一全部成功。成功将网页里文本框的内容发送给B端的窗体,并显示出来流程二进行到activex端反序列化的时候失败了。还导致IE停止工作
流程一完成了一遍 对数据对象的 序列化和反序列化
这里是不是证明了 两端的包含数据对象的那个程序集的版本信息之类的东西都一致了,
而且两端添加引用的是同一个dll。流程二的时候失败,这是哪里出问题了?流程一最后面的处理就是把收到字符串显示到文本框里而已。然后把数据对象送回activex端。
封装数据的那个类的程序集(C#.NET 的一个类库项目)是另外写的。生成了DLL文件(后面称为C.DLL)。activex端(C#.NET 的一个控件类库项目)添加引用了C.DLL。生成的时候会自动把C.DLL文件复制一份到本项目的输出目录下的。
(activex是在JSP页面使用的)。
B端(C#.NET 的一个窗体项目)同样添加了引用了C.DLL文件。
而且是在同一台电脑上测试的。
activex端是在浏览器上的。 B端是一个窗体。
可以把浏览器获得的数据发送到窗体上显示。(这一流程是成功实现了)。但是获取窗体数据发送回来的时候在activex端反序列化那一步出错了,说是找不到程序集。
这里应该是证明了 两端的包含数据对象的那个程序集的版本信息之类的东西都一致了,
才能在B端成功反序列化的。为什么反向的时候就不行了。
比如你注册的ActiveX控件在 "C:\MyActiveX\"
而IE加载后当前路径应该是 "C:\Programe ..."之类的一个路径引用DLL是程序会检索当前路径,IE下的路径,和.net的安装路径。明显这两个路径都没有你的DLL。解决方法如下:
将DLL Copy 到 IE 或者 .net 的关联路径。
或者用反射+ Application的路径(就是你的DLL所在路径)
我把需要序列化和反序列的DLL文件 放在IE的bin目录下就行了。可能IE加载完Activex后,Activex就成为IE程序的一部分了。
而反序列化的时候默认就是使用主程序的bin目录