问题描述
C#开发ActiveX求助...引用了一个第三方的dll,编译通过了。安装包制作安装,通过ie调用的时候调用ActiveX没有引用到第三方dll的方法都可以正常使用,引用到第三方dll的方法调用都没反应,感觉是第三方dll没有加载到,但是我dll跟ActiveX放的同个目录,网上找了好多方法,试过把第三方dll复制到windows、system32、浏览器根目录下都没有用。请高手指点.
解决方案
解决方案二:
注册全局的DLL写ActiveX的时候用动态引用之类的都可以解决....以前碰到过死活的调用不到..嘿嘿嘿嘿...我后来写动态引用解决的....在系统程序的资源目录里把DLL放在那儿....然后ActiveX去引用的....嗯...
解决方案三:
引用楼主chenqu6721的回复:
C#开发ActiveX求助...引用了一个第三方的dll,编译通过了。安装包制作安装,通过ie调用的时候调用ActiveX没有引用到第三方dll的方法都可以正常使用,引用到第三方dll的方法调用都没反应,感觉是第三方dll没有加载到,但是我dll跟ActiveX放的同个目录,网上找了好多方法,试过把第三方dll复制到windows、system32、浏览器根目录下都没有用。请高手指点.
有具体的代码吗?我参考下
解决方案四:
做ActiveX需要关注的点,很多。我曾经有个流水账的经验总结,你注意其中的一些关键字,自己百度看看-------------本机可以使用:1、因为加了这个[assembly:AllowPartiallyTrustedCallers()]有问题,反而不能显示,所以删除了设置部署到其他电脑不能使用:1、检查是否是IE配置问题(其实最后发现,在代码的处理到位的情况下,并不需要特别的配置IE)2、检查AllowPartiallyTrustedCallers问题2.1、本机不能用,用了会出错2.2、但如果确定是这个问题,那必须得先解决这个问题2.3、先撇开本地不能用的问题,先看部署客户端后的情况。结果发现运行出错-》ActiveX安全性问题,在构造函数中初始化,是不允许的2.4、因此,将构造函数初始化代码,放到Initial()中实现:提早实现2.5、又发现新的问题,还是出错,结果发现,是Activx引用的所有其他dll,都必须定义为AllowPartiallyTrustedCallers()2.6、终于,部署的客户端不出错了。同时开发环境下运行,也能正常运行了(原来是设置了AllowPartiallyTrustedCallers就出不来UI,现在可以了)2.7、但在部署的客户端,仍然不行,UI出不来2.8、然后猜测,会不会是引用了其他dll,而其他dll也需要注册?基于此,我专门做了一个独立的Test程序,就一个dll,最终结果是:一样不行2.9、没办法了,然后是狂翻帮助,在csdn上找,试图找到解决方法,过程中,发现了一些后来证明对我有用的东西,但当时并没觉得有什么用处,是ComRegisterFunctionAttribute3.0、继续baidu,发现基本上网上的解决方案,都不难。为什么他们能行,我就不行?3.1、卡住了,还有什么办法?降低版本试试,使用vs2008测试,这样更接近网络上介绍的方法,也就是有Setup安装包制作。这样可以对比看,SetUp安装包有没有特别之处?3.2、发现用vs2008+Setup安装包,可行!终于有重大突破。尝试不用Setup包,还是用原来的Regasm方式,发现也和一样不行!3.3、现在问题转变为:Setup安装包里,有什么特殊的,和我用RegAsm不同?3.4、找msi解析功能Orca,解析其中注册表的部分,和RegAsm写入注册表的有什么不同?发现不同在于少了CodeBase定义3.5、手工把CodeBase加上,正常了!此处该欢呼!3.6、现在在回想baidu上看到的几种方案,一切问题似乎都明白了。网上两类方案都行,而我不行的原因3.7、新问题来了:如何在注册表补充注册?这让我回想起baidu到的另外一个帖子,里边将Excel的ActiveX中,如何补充注册表的事情,用到了ComRegisterFunctionAttribute3.8、似乎理论上,不用ComRegisterFunctionAttribute也行,但这可能存在两个风险,一个是不用它复杂度增加,因为通过类本身注册有传入参数Type,带入了一些数据,方便注册表项定位,二是,一般程序去控制注册表,在win7下,非管理员是会被限制权限的3.9、决定使用ComRegisterFunctionAttribute,研究Registry对象的一些方法,定义注册/反注册的方法,搞定4.0、使用增加这两个补注册方法的dll,在vs2008下和vs2012下制作的Activex均有效。搞定!4.1、后注:代码权限问题;定义AllowPartiallyTrustedCallers和AllowPartiallyTrustedCallers未生效时,加载控件在IE上的表现不同,提示插件时,一个在上一个在下