调用API函数时出错:bad runtime function rederence

david0927cs2006 2009-11-21 11:08:41
如题

我是为了获取计算机名与IP地址,这是大常见的一个方法

我声明的全局外部函数如下:
function int WSAStartup( uint UIVersionRequested, ref s_WSAData lpWSAData ) library "wsock32.dll" alias for "WSAStartupA"
function int WSACleanup( ) library "wsock32.dll"
function int WSAGetLastError( ) library "wsock32.dll"
function int GetHostName( ref string name, int namelen ) library "wsock32.dll" alias for "GetHostNameA"
function string GetHost( string lpszhost, ref blob lpszaddress ) library "PBWS32.dll" alias for "GetHostA"

其中数据结构s_WSAData 定义如下:
unsignedinteger version
unsignedinteger highversion
character description[257]
character systemstatus[129]
unsignedinteger maxsockets
unsignedinteger maxupddg
string vendorinfo

调用程序如下:
s_wsadata l_WSAData
string ls_HostName = space( 128 )
string ls_IpAddress
int li_version = 257
blob{4} lb_HostAddress

if WSAStartUp( li_version, l_WSAData ) = 0 then
if GetHostName( ls_HostName, len( ls_HostName ) ) < 0 then
messagebox( '获取计算机主机名错误', WSAGetLastError( ) )
else
GetHost( ls_HostName, lb_HostAddress ) //获取主机名和IP地址
ls_IpAddress = string(asc(string(blobmid(lb_HostAddress,1,1))),'000') + '.'
ls_IpAddress += string(asc(string(blobmid(lb_hostaddress,2,1))),'000') + '.'
ls_IpAddress += string(asc(string(blobmid(lb_hostaddress,3,1))),'000') + '.'
ls_ipaddress += string(asc(string(blobmid(lb_hostaddress,4,1))),'000')
end if
WSACleanup()
else
messagebox( '获取计算机主机名错误', WSAGetLastError( ) )
end if

gstr_userinfo.hostname = ls_hostname
gstr_userinfo.ipaddress = ls_ipaddress

当执行每个API函数时都报如题的错误。
请各位高手指点迷津,万分感谢!!!!!

...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
david0927cs2006 2009-11-22
  • 打赏
  • 举报
回复
我程序的其它地方也有用到过API函数,但是没有报这样的错。
我想是API函数定义有问题,但查了几个API定义的资料,好像都是这个定义的,不知道怎么回事?

还请各位帮帮忙!!!
david0927cs2006 2009-11-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sky_4k_ppm 的回复:]
ref 参数不对
[/Quote]

这个提示是这样的
我想知道错在那个地方,要怎么纠正,还请各位指点指点!!!
david0927cs2006 2009-11-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jlwei888 的回复:]
function int WSAStartup( uint UIVersionRequested, ref s_WSAData
lpWSAData ) library "wsock32.dll"
function int WSACleanup() library "wsock32.dll"
function int WSAGetLastError ( ) library "wsock32.dll"
function int gethostname ( ref string name, int namelen ) library "wsock32.dll"
function string GetHost(string lpszhost, ref blob lpszaddress) library 'pbws32.dll'

定义有问题!
你还要有PBWS32.dll
[/Quote]

你这个方式的定义我用过,也一样,好像跟有没有别名没关系。
我这里有pbws32.dll文件
但在调用第一个API时也报错,还没有到PBWS32.dll
jlwei888 2009-11-22
  • 打赏
  • 举报
回复
function int WSAStartup( uint UIVersionRequested, ref s_WSAData
lpWSAData ) library "wsock32.dll"
function int WSACleanup() library "wsock32.dll"
function int WSAGetLastError ( ) library "wsock32.dll"
function int gethostname ( ref string name, int namelen ) library "wsock32.dll"
function string GetHost(string lpszhost, ref blob lpszaddress) library 'pbws32.dll'

定义有问题!
你还要有PBWS32.dll
SKY_4K_PPM 2009-11-22
  • 打赏
  • 举报
回复
ref 参数不对
david0927cs2006 2009-11-22
  • 打赏
  • 举报
回复
非常感谢jlwei888
这个好奇怪,我代码里,我曾经取消个别名,但也报错,我把你的代码复制过去,没报错了。
谢谢!!
jlwei888 2009-11-22
  • 打赏
  • 举报
回复
我用你的代码报错,重新定义就行了!
要行你换个机器试试吧!
david0927cs2006 2009-11-21
  • 打赏
  • 举报
回复
也许太晚了,我明天来看
david0927cs2006 2009-11-21
  • 打赏
  • 举报
回复
sf

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧