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没有被初始化的提示?这是为什么啊?
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没有被初始化的提示?这是为什么啊?
在开始时,你就给一个值 就可以了
在调用 ReadList 前,datatype也是由条件语句初始化的,delphi认为如果条件不成立的话,datatype仍然得不到初始化,所以仍然提示你。
还有,你的ReadList怎么声名的,count参数是形参还是变参。ReadList(....,var count:integer);
上面程序就是我调用的时候用的!count是设备传回来的记录总数,至于datatype我用的是RadioButton这个控件,我用的是IF语句进行判断的,但是我跟踪程序,用我的方法就是datatype不能赋值,至于conut返回不来记录数啊?!但是在vb中是可以的阿!delphi怎么完成不了啊?vb中对于datatype的赋值是这样的: If ListRecord.value Then datatype = 1,delphi我就不知道怎么用RadioButton这个控件了!求助!
function ReadList(hcom:thandle;devno:byte;recordtype:byte;var recordcount:word):integer stdcall;external '.dll';否则,recordcount只是把值传进函数,不能将结果返回。
If RadioButton2.Checked then datatype:=1;
-------------->>>
datatype:=integer(RadioButton2.Checked);
integer(RadioButton2.Checked);判断是否RadioButton2选中了,再强制转换成整型,再赋值给datatype.
...,var recordcount:word),否则是不能把结果返还给count的。
LONG PASCAL ReadAllRecord(HANDLE hCom,BYTE DevNo,BYTE RecordType,LPDWORD pRecordCout)
然后我再Delphi中是调用了它,就是我前面的那样声明!你看看是不是我声明错了阿?
LPWORD是一个指针,unsigned short *,定义应该改一下:
function ReadList(hcom:thandle;devno:byte;recordtype:byte;recordcount:pword):
调用时:
i:=ReadList(hcom,devno,datatype,@count);
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;
程序能够运行,但还是报内存的错误!头大了!多谢关注!
datatype:integer;
---------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.....
devno,datatype:Byte;