一次调用ACTIVEX控件中出现的问题.不可访问构建函数.

准备调用一个用VB开发的ActiveX组件,是一个.OCX文件。在VS.NET中添加引用导入一切正常。但在调用其中一个类的构造函数在编译时出错,提示如下:不可访问"$$$$$"因为它受保护级别限制。$$$$$是那个构造函数的名称。

分析可能是在导入时生成的包装类的构造函数的开放级别不对。先用AxImp生成这个组件的包装器组件文件名为my.dll,然后用reflector分析发现构造函数的开放级别为internal,也就是说只允许同一程序集调用。

解决办法:执行ildasm  my.dll  /output:my.il 命今,反编译用AxImp生成的包装器组件文件my.dll输出到my.il

打开my.il文件发现反编译后的构造函数代码如下:

    .method assembly specialname rtspecialname 
            instance void  .ctor() runtime managed internalcall
    {
    } // end of method ControlClass::.ctor

将上述代码改为:

    .method public specialname rtspecialname
            instance void  .ctor() runtime managed internalcall
    {
    } // end of method ControlClass::.ctor

保存后用Ilasm汇编程序将my.il重新汇编为my.dll,然后在VS。NET中重生新添加引用my.dll

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值