准备调用一个用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