delphi调用VB写的dll(50分)

  • 主题发起人 主题发起人 一剑飘雪
  • 开始时间 开始时间

一剑飘雪

Unregistered / Unconfirmed
GUEST, unregistred user!
function OpenComm(CommPort: Integer): THandle; stdcall; external 'dascomm.dll';<br>function Hand_Shake(Handle: THandle; Node_Addr: Integer; Password: pChar): Integer; stdcall; external 'dascomm.dll';<br>//int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password) 这是VB的Dll<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br> &nbsp;HandInt: Integer;<br> &nbsp;ComHandle: THandle;<br>begin<br> &nbsp;ComHandle := OpenComm(0);<br> &nbsp;if ComHandle &gt; 0 then<br> &nbsp; &nbsp;Memo1.Lines.Add('打开串口成功' + IntToStr(ComHandle));<br><br> &nbsp;HandInt := Hand_Shake(ComHandle, StrToInt(Edit1.Text), pChar('19550930')); //返回0为正确<br> &nbsp;if HandInt = 0 then<br> &nbsp; &nbsp;Memo1.Lines.Add('握手成功')<br> &nbsp;else<br> &nbsp; &nbsp;Memo1.Lines.Add(IntToStr(HandInt));<br>end;<br><br>这里面有一个问题是Password: pChar是不是写对了。我不知道VB里面LPCSTR是不是跟delphi里面的pChar相对应。<br>程序返回值说我密码错误,可是密码就是那个。<br>这里有二个可能,一个就是调用约定的问题。一个就是类型的问题。<br>你大家看看。[:(][:(][:(][:(]
 
VB是不能够开发动态链接库的DLL的。只能够开发COM,或者说是ActiveX的DLL。<br>你还是研究一下怎么调用COM吧。<br><br>其实Delphi对串口操作很简单。你可以看一下
 
我搞错了。他好像是C来发的。。<br>int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password)<br>上面写的是一个调用过程的例子。<br><br>用delphi怎么写。
 
int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password)<br>fuction Hand_Shake(icdev:Thandle;Node_Addr:integer;const Password:pchar):integer;stdcall;
 
int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password)<br>fuction Hand_Shake(icdev:Thandle;Node_Addr:integer;const Password:pchar):integer;cdecl; <br><br>你要看一下调用约定,不一定C写的DLL都是用STDCALL调用,有些是用C调用的
 
是啊。C写的函数如果不加__stdcall说明的话默认是C调用约定的。就是Cdecl。楼上的给出了函数形式
 
后退
顶部