iWei:=strtoint(leftstr(strWei,1))我的程序运行到上面的语句是就出现:Variable 'self' inaccessible here due to optimization
由于优化,变量self在这里不能存取,我没有优化,怎么出这样的错??

解决方案 »

  1.   

    你什么地方用到self啦?似乎是Self适用问题
      

  2.   

    leftstr是什么东东啊 没有见过啊
      

  3.   

    Self 是编译器自动优化的 你的问题应该不是优化的问题
      

  4.   

    楼主,Delphi帮你优化,你着这么急?你调试这一句代码,其中又没用到Self,Delphi给你这样的提示也不妨碍你什么,不是吗?另:Delphi的优化能力可是很强悍的啊。(传言:浮点运算出外)
      

  5.   

    试举一例:
    procedure test;
    var
      a, b: Integer;
    bein
      read(a);
      write(a);  read(b);  // 从这句开始,a 就用不到了,不妨将 b “映射”到 a 所在的位置,
                // 于是,这里的b其实就是a,b被优化掉了。
      write(b);
    end;
      

  6.   

    to: zhengji(看雨飞) 
    你调试这一句代码,其中又没用到Self,Delphi给你这样的提示也不妨碍你什么,不是吗?就是因为报这样的错,所以不能取出数据,程序不能执行下去。to:angle097113(深思<刘强>):leftstr是什么东东啊 没有见过啊
     
    Returns the substring of a specified length that appears at the start of a string
    看帮助
      

  7.   

    iWei:=strtoint(leftstr(strWei,1))这一句跟Self有什么联系?你把你的代码多贴几句出来!楼主在考验人的推断能力。那好,我想,strWei或者iWei至少有一个是类的非静态成员
    变量,将这个类记做TUnknown,然后楼主“创建”了一实例:
    var
      Obj: TUnknown;
    begin
      Obj.Foo; // 楼主给的代码在 Foo 函数中,楼主运行之,必出错。
    end;出错原因:
        楼主实际上并未“创建”出对象,此时的Obj = nil。楼主跟进Foo 后,一方面
    是对象指针 Self = nil, 令一方面是Delphi优化掉了Self参数。解决方法:
        不要忘了创建对象:Delphi里的对象都是在堆上的,是用类的静态构造函数创建
    出来的:
    begin
      Obj := TUnknown.Create;
      Obj.Foo;
    end;可合楼主之意否?
      

  8.   

    修改了下程序,还是报错procedure TForm1.MSComm1Comm(Sender: TObject);
    var
      STX:string;
      iLen:Integer;
    begin
      case MSComm1.CommEvent of
         ....
        comEvReceive:
        begin
          sleep(200);
          strWei:= MSComm1.Input ;
          iLen := MSComm1.InBufferCount ;
          STX:=MidStr(strWei,1,1);
          if STX= #2 then
          begin
            iWei:= strtoint(MidStr(strWei,5,6));    //到这一步都正常
            edit1.Text:= inttostr(iWei) ;   //报错:edit1.Text为Variable 'self'     
                                            inaccessible here due to optimization     
          end;
        end;
      end;
    end;
    这是用MSCOMM通过工业秤从串口读重量数据
      

  9.   

    我就不信。除非是在窗口创建之前 MSComm控件就发出了 OnComm 消息。
      

  10.   

    在窗口创建后,RUN前,进入OnComm事件,我测试了很多次。请高手指教
      

  11.   

    我把edit1.text该为label1.caption,  label1.caption也为:
    Variable 'self' inaccessible here due to optimization。我是用MSCOMM控件通过串口从toledo工业秤读重量数据,还有一个问题:
    我读出来的数据格式跟 toledo相应的技术手册上的有的不一样
      

  12.   

    楼主,你还是用Object Inpector加这个事件处理函数吧。再说数据,你把你收的数据跟技术手册上说的都列出来啊倒是。