我在安装了一个ActiveX控件后,调用该控件的一个属性myData,其属性为wideString,可是我用观察器查看它的值总是空字符串,但是用length(myData)获得其长度却是有的,而且如果我自己定义一个wstr:WideString然后将其赋值过来也能获得起字符串,即wstr:=Ocx.myData,再访问起wstr的长度与之前一样!
因此我开始跟踪这个属性变量,以下是我跟踪的一些情况:
myData的地址:$12FA70
$12FA70开始后面是大段的0值,
用Pointer(ocx.myData)获得起地址为:$15FED4,
这个地址处开始的确是该字符串的值,可是在没有对myData做任何写操作,只是有时读该属性,刚才的那个地址就有可能改变,不过改变后的地址处的字符串值还是对的。
现在我有几点疑惑希望高手能帮忙:
1.根据WideString变量的特征,应该是在mydata的$12FA70处的4个字节作为地址,该地址处开始的字符串是其值,而为何mydata处的开始地址为4个0。
2.为何用Pointer(mydata)又能访问找到该地址?但是找到的该地址为何又总会变?

解决方案 »

  1.   

    是和这种情况比较类似吗?
    var 
      s: String;
      ss: string;
      i: integer;
    begin
      s:= 'abcdefg';
      for i:= 0 to Length(s) do
      ss:= ss + s[i];
    end;
      

  2.   

    这个问题倒是没遇到过,不过他如果属性的值的地址总是变的话,那要看这个属性的含义是什么,还有就是这个属性是不是他程序里本身还有其他地方维护,也就是说别的地方会改变 myData的值或是含义(即地址)
      

  3.   

    To: fengjn(小枫) 
      跟你说的情况不一样,而是我的mydata的地址的开始4个字节总是0To:PrgmLover(爱国者)
      关键问题,是我根本没有做任何写操作,只是读,而且为何myData的开始自己总是0,而用pointer(mydata)却又能访问到呢?
      

  4.   

    Delphi中的widestring是从变量STR所在的地址处的前4个字节作为变量存储值所在的地址开始位置的,变量的值每个字符是16位占2个字节,你到底什么没有看懂啊?
      

  5.   

    恩,现在看懂了,也就是说你不明白为什么那4个字节都为0了。ActiveX是可以被任何语言所编写的程序调用的,所以他对widestring的特征是不是有什么特别之处呢?