vb调用vc开发的dll文件控制LED显示屏的问题
我现在用vb做一个程序,要控制LED条屏的显示内容,调用的是第三方的vc开发的一个dll动态链接库。第三方提供了一个vc通讯程序和一个vb的demo源代码程序。我用第三方提供的vc程序时可以控制LED条屏的,但用第三方提供的vb代码却怎么也和LED通讯不上。用串口监听软件也监视不到任何数据。
可我用我同事的电脑,同样是第三方提供的vb源代码,在他的电脑上可以通讯的上。不知道为什么。
我用串口线把我们两个的串口连接在一起,收发数据都没有问题。不知道为什么我的串口不能和LED条屏通讯。
后来,我用一台新装的xp系统的机器的串口和LED通讯,问题和我的电脑一样,后来我把这台计算机的系统重新安装了以后,第三方提供的vb源代码可以和LED条屏通讯的上,但是用我写的调用dll的程序却怎么也通讯不上。但在我同事的电脑上,不管是用第三方提供的vb源代码还是用我写的调用dll的程序都可以通讯的上。不知道为什么?、
非常急,请高手鼎力相助!!!
先谢谢了!
[解决办法]
硬件和平台问题,不要一门心思追究程序~~
[解决办法]
"在我同事的电脑上,不管是用第三方提供的vb源代码还是用我写的调用dll的程序都可以通讯的上"
这表示你的代码不是问题, 问题应该出在 硬件 或 (发送消息)系统环境.
1.LED 厂家 我试过几家, 都要初始化设置你的电脑, 你设置的与你同事一样吗?(如图的设置)
2.这设备绝大部份是采用RS485并附232接口,软件写法一样但硬件的接线方式不同,你与你同事一样吗?
3.这设备基本上,单排字幕的直接用MSCOMM控件串口通讯即可, 但多排的一般就用网络方式或串口,但串口又是采用异步通讯 利用HOOK消息机制来收发消息, 你的机器是否缺少了什么...这就难说了.
我有一堆资料, 是当初我做高速路全自动收费系统时被整得七晕八素所要来的材料, 到最后我是直接用厂商提供的 vb模块搞定的, 要的话就留邮箱我发给你.
图片就是用这代码发送的
Private Sub Command5_Click()
Dim ARect As rect
Timer1.Enabled = False
MakeRoot ROOT_PLAY, SCREEN_COLOR '形成发送数据
AddLeaf 10000 '追加一个页面
'浙江霸王衡器有限公司
SetRect ARect, 0, 0, 48, 32 '限定字符显示在这个区域
AddText "浙江霸王衡器有限公司 欢迎您!", ARect, 2, 1, 1, "宋体", 9, RGB(255, 255, 0)
'AddText "欢迎 刘国玉 小姐 莅临指导!", ARect, 2, 1, 1, "宋体", 9, RGB(255, 255, 0)
SetRect ARect, 0, 16, 48, 48 '211 2是滚屏,前面的1是速度,越大越快
AddText "12.34", ARect, 1, 1, 1, "楷体", 9, RGB(255, 255, 0)
SetRect ARect, 3, 32, 48, 64 '限定字符显示在这个区域
AddText "10 元", ARect, 1, 1, 1, "楷体", 9, RGB(255, 255, 0)
Me.Caption = "正在发送数据..."
LED_SendToScreen dev, 255, "192.168.0.99", 6666
End Sub
'********************************** 这是消息机制
Function WndProc(ByVal hWnd As Long, ByVal Message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim P As TNotifyMessage
If Message = WM_LED_NOTIFY Then
If LED_GetNotifyMessage(P) <> 0 Then '该函数专门为VB编写,使用该函数可得到发送状态结构
If P.Message = LM_TX_COMPLETE Then
Form1.Caption = "发送完成"
ElseIf P.Message = LM_RESPOND Then
If P.Command = PKC_QUERY Then
Form1.Caption = "查询状态成功"
ElseIf P.Command = PKC_GET_POWER Then
If P.Status = LED_POWER_ON Then
Form1.Caption = "电源已打开"
Else:
Form1.Caption = "电源已关闭"
End If
ElseIf P.Command = PKC_SET_POWER Then
If P.Result = 99 Then
Form1.Caption = "处于自动开关屏模式,不能进行电源操作"
ElseIf P.Status = LED_POWER_ON Then
Form1.Caption = "电源已打开"
ElseIf P.Status = LED_POWER_OFF Then
Form1.Caption = "电源已关闭"
End If
ElseIf P.Command = PKC_GET_BRIGHT Then
Form1.Caption = "显示屏亮度为:" & P.Status
ElseIf P.Command = PKC_SET_BRIGHT Then
Form1.Caption = "亮度调整完毕"
ElseIf P.Command = PKC_ADJUST_TIME Then
Form1.Caption = "时钟校正完成"
End If
ElseIf P.Message = LM_TIMEOUT Then
Form1.Caption = "传送超时"
End If
End If
Else
WndProc = CallWindowProc(lpPrevWndProc, hWnd, Message, wParam, lParam)
End If
End Function
PS 我足足被它整了半个多月, 到最后 100% 以 VB 搞定, 你真没办法也别调用dll 直接用他们给你的 .bas 吧, 我估计就是你调用了第三方DLL而又要间接的消息发送, 在这环节你可能出错了.