各路高手,请指教。送高分

loveliufeng 2003-09-20 01:48:24
我调用c语言写的DLL,其中一个原型是DllExport void WINAPI WriteIrCom (LPSTR lpStr);
参数是LPSTR型,但vb没有这种类型,我定义是string,但显示出的是空,但得到的长度大于0,请 问什么原因?
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveliufeng 2003-09-20
  • 打赏
  • 举报
回复
我把原程序发给大家看看,由于我临时学vb为客户写一个接口,幼稚之处请不要见笑
Private Declare Function vbOpenIrCom Lib "IrLib.dll" (ByVal nport As Integer, ByVal nBaud As Long) As Integer

Private Declare Sub CloseIrCom Lib "IrLib.dll" ()

Private Declare Function vbReadIrCom Lib "IrLib.dll" (ByVal str As String) As Integer

Private Declare Sub WriteIrCom Lib "IrLib.dll" (ByVal str1 As String)


Dim D1, D2 As String
Dim i, nChar, nCount As Integer
Dim SequenceNo As Long

Dim wChecksum As Long
Dim cRet, reTry As Byte
Dim buffer As String
Dim ACK As String

Dim NAK As String
Dim OVER As String
Dim szBuf As String











Private Sub Command1_Click()
Dim flag1, flag2 As Boolean

flag1 = False
flag2 = True
SequenceNo = 0

wChecksum = 0

If vbOpenIrCom(1, 115200) <> 0 Then


Call WriteIrCom("READ" + Chr(13))

nCount = vbReadIrCom(buffer)
If buffer <> ACK Then
Call WriteIrCom(NAK)
Else
flag1 = True




End If

second:

If flag1 Then

While (flag2)

first:
nCount = vbReadIrCom(buffer)

If buffer = OVER Then
flag2 = False
GoTo second
End If

If Asc(Mid(buffer, 1, 1)) <> SequenceNo Then
Call WriteIrCom(NAK)
GoTo first
End If

For i = 1 To nCount
wChecksum = wChecksum + Asc(Mid(buffer, i, 1))
Next i
wChecksum = wChecksum - Asc(Mid(buffer, Len(buffer), 1))
wChecksum = wChecksum - Asc(Mid(buffer, (Len(buffer) - 1), 1))

D1 = Chr(wChecksum \ 256)
If D1 = Chr(13) Then
D1 = Chr(Asc(D1) + 1)
End If

D2 = Chr(wChecksum Mod 256)

If D2 = Chr(13) Then
D2 = Chr(Asc(D2) + 1)
End If
If D1 <> Mid(buffer, Len(buffer), 1) Or D1 <> Mid(buffer, (Len(buffer) - 1), 1) Then
WriteIrCom (NAK)
GoTo first
End If

buffer = Mid(buffer, 2, Len(buffer) - 2)
WriteIrCom (ACK)

SequenceNo = (SequenceNo + 1) Mod 10



Wend
End If




End If

Call CloseIrCom

szBuf = Mid(buffer, 1, (Len(buffer) - 2))







End Sub
txlicenhe 2003-09-20
  • 打赏
  • 举报
回复
是不是 string * 255
射天狼 2003-09-20
  • 打赏
  • 举报
回复
是定长字符串,还是变长字符串,,改定长试一下~~
david1981 2003-09-20
  • 打赏
  • 举报
回复
你先用SPACE函数,给这个传递进去的地址变量一个空间值,然后用TRIM函数来进行后期处理,再看一下得出的事是否是你所需要的。
TechnoFantasy 2003-09-20
  • 打赏
  • 举报
回复
应该可以,你定义的String类型加了ByVal没有?
踏平扶桑 2003-09-20
  • 打赏
  • 举报
回复
那个你可以用public type lpstr自己来定义。

7,789

社区成员

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

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