+ -
当前位置:首页 → 问答吧 → 关于形参和实参不一致的问题

关于形参和实参不一致的问题

时间:2011-11-24

来源:互联网

procedure TMainForm.Button9Click(Sender: TObject);
var
  s: integer ;
begin
  s := strtoint(ComboBox8.Text)*32 + strtoint(ComboBox9.Text) ;
  if ComboBox8.Text='' then
  begin
  ShowMessage('Please select Projector ID');
  exit;
  end;
  if not switchchanel_video(s,4,'')//这里报错
  then ShowMessage('Divide error');
end;
这个是用来调用DLL的
声明如下
function switchchanel_video(maxinputchannel,maxoutputchannel:integer; var sendstring:pchar):integer;stdcall;
function switchchanel_video;stdcall; external DLLName;


这到底怎么不一致了啊 最后一个参数我要为空

作者: minipig520   发布时间: 2011-11-24

if not switchchanel_video(s,4,nil)

试试?

作者: warrially   发布时间: 2011-11-24

不行哦 用‘’时提示 types of actual and formal var parameters must be identical

作者: minipig520   发布时间: 2011-11-24

换成 NIL 还错?

作者: warrially   发布时间: 2011-11-24

定义一个临时变量 将它复制为空 然后传这个变量到函数里

procedure TMainForm.Button9Click(Sender: TObject);
var
  s: integer ;
  tmpp: PChar;
begin
  tmpp := PChar('');
  s := strtoint(ComboBox8.Text)*32 + strtoint(ComboBox9.Text) ;
  if ComboBox8.Text='' then
  begin
  ShowMessage('Please select Projector ID');
  exit;
  end;
  if not switchchanel_video(s,4,tmpp )
  then ShowMessage('Divide error');
end;

作者: csn168   发布时间: 2011-11-24

是啊 还多了错误提示 说showmessage那要用布尔类型

作者: minipig520   发布时间: 2011-11-24

引用 4 楼 csn168 的回复:
定义一个临时变量 将它复制为空 然后传这个变量到函数里

procedure TMainForm.Button9Click(Sender: TObject);
var
s: integer ;
tmpp: PChar;
begin
tmpp := PChar('');
s := strtoint(ComboBox8.Text)*32 + strtoint(Combo……

[ERROR]typeexpression must be BOLLEAN 错误指向showmessage
[Fatal Error] Could not compile used unit 'BD100TEST.pas'

作者: minipig520   发布时间: 2011-11-24

procedure TMainForm.Button9Click(Sender: TObject);
var
  s,ret: integer ;
  temp : PChar;
begin
  temp := PChar('') ;
  s := strtoint(ComboBox8.Text)*32 + strtoint(ComboBox9.Text) ;
  if ComboBox8.Text='' then
  begin
  ShowMessage('Please select Projector ID');
  exit;
  end;
  if ComboBox9.Text='' then
  begin
  ShowMessage('Please select Projector ID');
  exit;
  end;
  ret := switchchanel_video(s,4,temp);
  if ret = 0
  then ShowMessage('Divide error');
end;


这样编译是没有问题了,但为什么运行到下面begin就停止了?
begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

作者: minipig520   发布时间: 2011-11-24

热门下载

更多