| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 787 人关注过本帖
标题:VB和c#通信,VB接收问题
只看楼主 加入收藏
mhjuan119
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-10-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
VB和c#通信,VB接收问题
写了两个程序,一个是VB,一个是c#,两个程序之间可以相互发送数据,但是不知道为什么,c#给VB发送数据的长度超过48时,VB只能接收48个数据,也不知道是哪里的问题,请高手指点!!!!!
VB与c#通信.rar (105.24 KB)


[ 本帖最后由 mhjuan119 于 2015-2-13 16:58 编辑 ]
搜索更多相关主题的帖子: 通信 
2015-02-13 16:54
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:10 
我来看看,下载中。

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-02-13 19:01
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
我那边的测试结果如下:
VB——>C# 接收成功/48位正常
C#——>VB 接收失败/VB接受Text无反应

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-02-13 19:04
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
很抱歉,你的VB方面代码无问题,应该是C语言的发送问题,我没学过C语言,想帮你但心有余而力不足啊。

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-02-13 19:09
wxyu247
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2015-1-23
收藏
得分:10 
我的测试结果是对的,发了101个,两边都正常
建议COPYDATASTRUCT的lpdata字段用字节数组,字符串在api的参数传递中会进行些转化,默认unicode会转成ansi传递
System.Text.Encoding.Default.GetBytes(this.textBox1.Text);这里得到的是ansi字串长度,对数字而言,长度减半了
byte[] sarr = System.Text.Encoding.Unicode.GetBytes(this.textBox1.Text);
[DllImport("User32.dll",CharSet=CharSet.Unicode, EntryPoint = "SendMessageW")]
[MarshalAs(UnmanagedType.LPWStr)]
        public string lpData;
vb
Public Type COPYDATASTRUCT
    dwData As Long '结构长度,传lenb(DatrStruct)
    cbData As Long '后面指针所指内容的长度,传lenb([字符串])
    'lpData As String '声明为一个String,然后直接赋值为字符串变量就行.
    lpData as long
End Type
DataStruct.lpData = StrPtr(CtlText)

CopyMemory DatrStruct, ByVal lParam, LenB(DatrStruct)
        Dim s As String
        s = Space(DatrStruct.cbData \ 2)
        CopyMemory ByVal StrPtr(s), ByVal DatrStruct.lpData, DatrStruct.cbData
        Form1.Text3 = s
2015-02-13 20:48
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
以下是引用wxyu247在2015-2-13 20:48:58的发言:

我的测试结果是对的,发了101个,两边都正常
建议COPYDATASTRUCT的lpdata字段用字节数组,字符串在api的参数传递中会进行些转化,默认unicode会转成ansi传递
System.Text.Encoding.Default.GetBytes(this.textBox1.Text);这里得到的是ansi字串长度,对数字而言,长度减半了
byte[] sarr = System.Text.Encoding.Unicode.GetBytes(this.textBox1.Text);
[DllImport("User32.dll",CharSet=CharSet.Unicode, EntryPoint = "SendMessageW")]
[MarshalAs(UnmanagedType.LPWStr)]
        public string lpData;
vb
Public Type COPYDATASTRUCT
    dwData As Long '结构长度,传lenb(DatrStruct)
    cbData As Long '后面指针所指内容的长度,传lenb([字符串])
    'lpData As String '声明为一个String,然后直接赋值为字符串变量就行.
    lpData as long
End Type
DataStruct.lpData = StrPtr(CtlText)

CopyMemory DatrStruct, ByVal lParam, LenB(DatrStruct)
        Dim s As String
        s = Space(DatrStruct.cbData \ 2)
        CopyMemory ByVal StrPtr(s), ByVal DatrStruct.lpData, DatrStruct.cbData
        Form1.Text3 = s

为毛我测试的结果是VB无法接受任何讯息呢???

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-02-14 11:07
wxyu247
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2015-1-23
收藏
得分:0 
是不是文件夹没关,我第一次运行也没收到,原来文件夹名也是vb
2015-02-14 15:24
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
我试一下

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-02-15 22:01
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
另外你发现一个问题了没
B语言的程序的启动时间比C语言要少

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-02-15 22:01
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
没用,文件夹关掉VB也接受不到讯息

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-02-15 22:02
快速回复:VB和c#通信,VB接收问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017369 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved