诸位帮我看看,这个调用API的程序哪里出错?

controldp 2004-01-05 06:06:07
VC编的API函数:
int Connect(char *hostip,unsigned short Uport)
VB中我作如下处理:
Public Declare Function Connect Lib "d:\a\b\smm.dll" (HostIP As Byte, ByVal Port As Integer) As Long

form中:
Dim str1 As String
Dim psHostip(25) As Byte
Dim psPort As Integer
str1 = "192.168.1.99"
Port = 6300
CopyMemory pszHostIP(0), ByVal (StrPtr(str1)), 25

PROussdconnect = Connect(pszHostIP(0), Port)

执行后,出现:文件未找到:"d:\a\b\smm.dll"的错误,不知道是为什么?

...全文
30 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LanceJin 2004-01-06
  • 打赏
  • 举报
回复
redim不用也没关系
PROussdconnect = Connect(varPtr(pszHostIP(0)), psPort)就可以了,不用CopyMemory
controldp 2004-01-06
  • 打赏
  • 举报
回复
多谢两位相助。
首先我确定smm.dll是在d:\a\b\路径下。
jlctt(金)所说的那种字符串直接赋值给动态数组的方法(pszHostIP=str1),我也试过,但在确定数组首字节的内存地址之前(pszHostIP(0))之前,必须先确定这个数组的维数。也就是(redim pszHostIP(xx) as byte),这就是我为什么使用CopyMemory的原因。
昨天经过考虑后,我在想,这个Connect API函数传递的是一个地址,一个数值。
那么VB调用它时,是不是应该用PROussdconnect = Connect(varptr(pszHostIP(0)), psPort)
这种方式,但执行后,又出现“实时错误6,溢出”的错误,问题又出在哪里呢?
jnhjone 2004-01-06
  • 打赏
  • 举报
回复
其实DLL文件放在那个目录无所谓了都一样
firechun 2004-01-06
  • 打赏
  • 举报
回复
声明中指定的DLL路径不对,如果DLL放在系统目录或当前路径下,声明时不需要加路径,否则必须指定正确的路径。
放在系统目录或当前目录下的声明方法:
declare function funcname lib "dllname"
放在指定目录下:
declare function funcname lib"目录\dllname"
你看到的错误提示表示d:\a\b\smm.dll文件不存在
LanceJin 2004-01-05
  • 打赏
  • 举报
回复
修改Dim psPort As Integer为Dim psPort As long

"d:\a\b\smm.dll"这样申明是d:\a\b\路径吧,从哪里看来的?
LanceJin 2004-01-05
  • 打赏
  • 举报
回复
Public Declare Function Connect Lib "smm.dll" (byref HostIP As Byte, ByVal UPort As long) As Long

在form中:
Dim str1 As String
Dim pszHostIP() As Byte
Dim psPort As Integer
str1 = "192.168.1.99"
Port = 6300

pazHostIP=str1

PROussdconnect = Connect(pszHostIP(0), psPort)

把smm.dll放在系统目录或应用目录下就行了
controldp 2004-01-05
  • 打赏
  • 举报
回复
不好意思,代码写错了,正确如下:

VC编的API函数:
int Connect(char *hostip,unsigned short Uport)
VB中我作如下处理:
Public Declare Function Connect Lib "d:\a\b\smm.dll" (HostIP As Byte, ByVal UPort As Integer) As Long

在form中:
Dim str1 As String
Dim pszHostIP(25) As Byte
Dim psPort As Integer
str1 = "192.168.1.99"
Port = 6300
CopyMemory pszHostIP(0), ByVal (StrPtr(str1)), 25

PROussdconnect = Connect(pszHostIP(0), psPort)

执行后,出现:文件未找到:"d:\a\b\smm.dll"的错误,不知道是为什么?


1,486

社区成员

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

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