function OpenComm(CommPort: Integer): THandle; stdcall; external 'dascomm.dll';
function Hand_Shake(Handle: THandle; Node_Addr: Integer; Password: pChar): Integer; stdcall; external 'dascomm.dll';
//int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password) 这是VB的Dllprocedure TForm1.Button1Click(Sender: TObject);
var
  HandInt: Integer;
  ComHandle: THandle;
begin
  ComHandle := OpenComm(0);
  if ComHandle > 0 then
    Memo1.Lines.Add('打开串口成功' + IntToStr(ComHandle));  HandInt := Hand_Shake(ComHandle, StrToInt(Edit1.Text), pChar('19550930')); //返回0为正确
  if HandInt = 0 then
    Memo1.Lines.Add('握手成功')
  else
    Memo1.Lines.Add(IntToStr(HandInt));
end;这里面有一个问题是Password: pChar是不是写对了。我不知道VB里面LPCSTR是不是跟delphi里面的pChar相对应。
他说我密码错误,可是密码就是那个。
这里有二个可能,一个就是调用约定的问题。一个就是类型的问题。
你大家看看。

解决方案 »

  1.   

    我写错了。我也不知道那个DLL是用什么写的。
    int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password)
    上面是一个调用的例子。。  用delphi怎么写呀。。
      

  2.   

    定义PChar指针变量
    procedure TForm1.Button1Click(Sender: TObject);
    var
      HandInt: Integer;
      ComHandle: THandle;
      Psw:PChar
    begin
      New(Psw);                  //<--创建指针
      StrPCopy(Psw,'19550930');  //<--传入密码
      ComHandle := OpenComm(0);
      if ComHandle > 0 then
        Memo1.Lines.Add('打开串口成功' + IntToStr(ComHandle));  HandInt := Hand_Shake(ComHandle, StrToInt(Edit1.Text), Psw); 
      if HandInt = 0 then
        Memo1.Lines.Add('握手成功')
      else
        Memo1.Lines.Add(IntToStr(HandInt));
      Dispose(Psw);   //<--释放指针
    end;
      

  3.   

    定义PChar指针变量
    procedure TForm1.Button1Click(Sender: TObject);
    var
      HandInt: Integer;
      ComHandle: THandle;
      Psw:PChar;                 //<--定义密码指针
    begin
      New(Psw);                  //<--创建指针
      StrPCopy(Psw,'19550930');  //<--传入密码
      ComHandle := OpenComm(0);
      if ComHandle > 0 then
        Memo1.Lines.Add('打开串口成功' + IntToStr(ComHandle));  HandInt := Hand_Shake(ComHandle, StrToInt(Edit1.Text), Psw); 
      if HandInt = 0 then
        Memo1.Lines.Add('握手成功')
      else
        Memo1.Lines.Add(IntToStr(HandInt));
      Dispose(Psw);   //<--释放指针
    end;