本人正在学习写dll,下面这句
TAction(ActionList1.Actions[k]).Enabled:=false; 在dll会报错,请问要怎么改才好错误提示为:Exception EInvalidCast in module authority.dll at 0003coaf

解决方案 »

  1.   

    请问ActionList1在DLL的单元里面吗?
    注意ActionList1.Actions[k]是否越界。
      

  2.   

    K没有越界,ActionList1在DLL中
    我写了一个不是dll版的程序,可以正常运行,但移到dll中,TAction(ActionList1.Actions[k]).Enabled:=false; 这样写会报错,不知怎么改写?
      

  3.   

    说错了,ActionList1 不在dll中,我是把ActionList1做为参数传到dll中的
      

  4.   

    TAction(ActionList1.Actions[k]).Enabled是属性,对它赋值实际上是过程调用,而且会牵扯到TAction所关联的元件,如菜单项、按钮等,放在dll赋值肯定出错。建议你传递一个引用或者指针变量到dll的函数,然后在主进程中根据返回的变量再设置TAction的属性
      

  5.   

    ActionList1具有很多属性,可以单独设置编写代码,建议按楼上的做法。
      

  6.   

    但把MainMenu1做为参数传入dll, MainMenu1.Items.Items[k].Visible:=false;这样写可以通过
      

  7.   

    不管TAction(ActionList1.Actions[k]).XXXX  怎么写都报错,我怀疑是类的转换出了问题
      

  8.   

    这样 TAction(ActionList1.Actions[0]).AutoCheck:=true; 可以通过;
      

  9.   

    TAction(ActionList1.Actions[0]).GroupIndex:=12; 这个又会报错。
    有的属性可以,有的不可以
      

  10.   

    ActionList1.Actions[k],是什么类型的Action说一下,
      

  11.   

    经过多次测试,得到的是,可能内存管理这这方面有点问题,只要程序和dll共用相同的内存就可以
      

  12.   

    双方最好是基于同一版本的dcu或bpl,否则会出现类似问题