DELPHI编写的DLL为何在VB中调用错误?(50分)

  • 主题发起人 主题发起人 zhang
  • 开始时间 开始时间
Z

zhang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DELPHI中编写一个简单DLL,源码如下:<br>library project1;<br><br>uses<br>&nbsp; SysUtils,<br>Classes;<br><br>function in_portb(port:integer):integer;export;<br>var dsr:smallint;<br>begin<br>&nbsp; &nbsp;asm<br>&nbsp; &nbsp;mov ax,0<br>&nbsp; &nbsp;mov dx,port<br>&nbsp; &nbsp;in al,dx<br>&nbsp; &nbsp;mov dsr,ax<br>&nbsp; end;<br>&nbsp; result:=dsr;<br>end;<br><br>exports<br>&nbsp; in_portb index 1 name 'in_portb';<br><br>begin<br>end.<br>&nbsp;<br>在VB中调用,出现调用49号错误,为什么?<br>Private Declare Function in_portb Lib "c:/project1.dll" _<br>(ByVal port As Integer) As Integer<br><br>Private Sub Command1_Click()<br>in_portb (330)<br>End Sub<br>
 
48号错误是什么错误呢?能肯定是DLL有问题而不是<br>系统不允许读写端口吗?<br><br>就我所知,好像Win32下直接访问端口不是这么简单,<br>网上有很多这种讨论甚至控件,可以参考一下.<br>
 
不好意思,以后不在自己平时不做的问题上<br>掺和了.(虽然少了些奥林匹克精神)
 
Win95下原则不允许直接读Port,但为了兼容性实际上还是可行的<br><br>你的Delphi和VB是什么版本,<br>如都是16bit版,应该没问题<br>如是32bit版本,请把delphi函数说明'export"换成 'stdcall'<br><br>如一个16bit (vb3.0) ,一个32bit(delphi 3.0)<br>那就有问题了interger大小不一致<br><br>btw:why do you use vb,if you are using delphi now?<br><br>
 
能否帮忙介绍一下cdecl , stdcall, safecall的区别!
 
你应该去看机械工业出版社的&lt;delphi 3开发使用手册&gt;第25章<br><br>为了分数,只好敲字了<br>主要区别是参数传递次序和清stack 的方法:<br><br>stdcall 从右到左, &nbsp; 被调用一方 (Win32标准)<br>cdcel &nbsp; 从右到左 &nbsp; &nbsp;调用程序<br>safecall 从右到左 &nbsp; &nbsp;被调用一方 <br>fast-call 从左到右 使用寄存器(delphi缺省)<br>pascal &nbsp; 从左到右 &nbsp; 被调用一方(win3.x缺省)<br><br>建议:<br>&nbsp;使用标准stdcall(32 bit)<br>&nbsp;如有其他语言程序调用,不要使用fast-call <br><br>我看你的程序是delphi 1.0的,<br>你可以把你的程序'export'换成'pascal'<br><br><br><br><br><br>
 
接受答案了.
 
后退
顶部