procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
count:word;
datatype:integer;
begin
If RadioButton1.Checked then datatype:=0;
If RadioButton2.Checked then datatype:=1;
i:=ReadList(hcom,devno,datatype,count);
Memo1.Lines.Add(IntToStr(count));
if i<>1 then
 Memo1.Lines.Add('Error')
 else
 begin
  Memo1.Lines.Add('OK');
  end;
end;
这样一段程序,ReadList为读取设备记录,count是返回记录数,datatype是记录类型。运行时出现变量datatype、count没有被初始化的提示?这是为什么啊?

解决方案 »

  1.   

    因为如果上面的两个if语句都没有执行,下面的datatype 、count就没有一个初值当然提示信息了,
    在开始时,你就给一个值 就可以了
      

  2.   

    因为你在调用 ReadList 前,确实没有初始化 count 呀。
    在调用 ReadList 前,datatype也是由条件语句初始化的,delphi认为如果条件不成立的话,datatype仍然得不到初始化,所以仍然提示你。
      

  3.   

    这个RadioButton你用过吗?它的事件一般是什么啊?
      

  4.   

    我把ReadList(hcom,devno,1,count)提示count没有初始化!count怎么初始化啊?
      

  5.   

    conut是设备返回来的记录数,该怎么办啊?急
      

  6.   

    这个提示并不影响你的使用,只要你确认datatype能够被赋值。
    还有,你的ReadList怎么声名的,count参数是形参还是变参。ReadList(....,var count:integer);
      

  7.   

    function ReadList(hcom:thandle;devno:byte;recordtype:byte;recordcount:word):integer stdcall;external '.dll';
    上面程序就是我调用的时候用的!count是设备传回来的记录总数,至于datatype我用的是RadioButton这个控件,我用的是IF语句进行判断的,但是我跟踪程序,用我的方法就是datatype不能赋值,至于conut返回不来记录数啊?!但是在vb中是可以的阿!delphi怎么完成不了啊?vb中对于datatype的赋值是这样的: If ListRecord.value Then datatype = 1,delphi我就不知道怎么用RadioButton这个控件了!求助!
      

  8.   

    现在是我用ReadList(hcom,devno,0,count),设备中有2条记录,但是返回的count值是63692,这个数值是怎么回事啊?应该返回2的阿?怎么会返回63692啊!
      

  9.   

    改成这样:
    function ReadList(hcom:thandle;devno:byte;recordtype:byte;var recordcount:word):integer stdcall;external '.dll';否则,recordcount只是把值传进函数,不能将结果返回。
      

  10.   

    If RadioButton1.Checked then datatype:=0;
    If RadioButton2.Checked then datatype:=1;
    -------------->>>
    datatype:=integer(RadioButton2.Checked);
      

  11.   

    你的datatype:=integer(RadioButton2.Checked);是什么意思啊?搞不懂,但是好像很有道理!能否解释一下!谢谢
      

  12.   


    integer(RadioButton2.Checked);判断是否RadioButton2选中了,再强制转换成整型,再赋值给datatype.
      

  13.   

    原来如此啊!多谢指点!这个问题已经解决,现在还是count的返回值得问题,总是得不到正确的值,不管设备里有多少条记录,总是63692!奇怪
      

  14.   

    应该是参数的问题,如果想把参数的内容改变,定义一定要加关键字var
    ...,var recordcount:word),否则是不能把结果返还给count的。
      

  15.   

    这个函数原来的声明是用vc++写的!
    LONG PASCAL ReadAllRecord(HANDLE hCom,BYTE DevNo,BYTE RecordType,LPDWORD pRecordCout)
    然后我再Delphi中是调用了它,就是我前面的那样声明!你看看是不是我声明错了阿?
      

  16.   

    声明错了。
    LPWORD是一个指针,unsigned short *,定义应该改一下:
    function ReadList(hcom:thandle;devno:byte;recordtype:byte;recordcount:pword):
    调用时:
    i:=ReadList(hcom,devno,datatype,@count);
      

  17.   

    真是太感谢gzmhero(hihihi)!有空请你喝茶!原来是这么回事啊!刚接触Delphi,搞不懂他的指针是怎么一回事,多谢了!那对于count我该怎么知道他的返回值是多少呢?Memo1.Lines.Add(IntToStr(count));这一句该怎么改啊?
      

  18.   

    这个不用改,返回的值放到count中。
      

  19.   

    虽然不大明白!虽然还是有问题,我还是自己去解决好了!17:00结贴!
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    count:word;
    datatype:integer;
    begin
    datatype:=integer(RadioButton2.Checked);
    i:=ReadList(hcom,devno,datatype,@count);
    Memo1.Lines.Add(IntToStr(count));
    if i<>1 then
     Memo1.Lines.Add('Error')
     else
     begin
      Memo1.Lines.Add('OK');
      end;
    end;
    程序能够运行,但还是报内存的错误!头大了!多谢关注!
      

  20.   

    而且我逐步的进行了调试,程序段可以全部运行完,得出的结果也是正确的,看来还是我以前定义错了。这点多谢 gzmhero(hihihi) 一直关注,是不是还要释放指针变量啊!
      

  21.   

    不需要释放变量,因为你没有动态申请内存,只是把count的地址作为指针传递的。
      

  22.   

    类型定义再改一下:
    datatype:integer;
    ---------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.....
    devno,datatype:Byte;
      

  23.   

    Thank you very much!虽然只有30分,请不要见怪!