注册 登录
编程论坛 VB6论坛

VB和c#通信,VB接收问题

mhjuan119 发布于 2015-02-13 16:54, 787 次点击
写了两个程序,一个是VB,一个是c#,两个程序之间可以相互发送数据,但是不知道为什么,c#给VB发送数据的长度超过48时,VB只能接收48个数据,也不知道是哪里的问题,请高手指点!!!!!
只有本站会员才能查看附件,请 登录


[ 本帖最后由 mhjuan119 于 2015-2-13 16:58 编辑 ]
11 回复
#2
renxiaoyao362015-02-13 19:01
我来看看,下载中。
#3
renxiaoyao362015-02-13 19:04
我那边的测试结果如下:
VB——>C# 接收成功/48位正常
C#——>VB 接收失败/VB接受Text无反应
#4
renxiaoyao362015-02-13 19:09
很抱歉,你的VB方面代码无问题,应该是C语言的发送问题,我没学过C语言,想帮你但心有余而力不足啊。
#5
wxyu2472015-02-13 20:48
我的测试结果是对的,发了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
#6
renxiaoyao362015-02-14 11:07
以下是引用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无法接受任何讯息呢???
#7
wxyu2472015-02-14 15:24
是不是文件夹没关,我第一次运行也没收到,原来文件夹名也是vb
#8
renxiaoyao362015-02-15 22:01
我试一下
#9
renxiaoyao362015-02-15 22:01
另外你发现一个问题了没
B语言的程序的启动时间比C语言要少
#10
renxiaoyao362015-02-15 22:02
没用,文件夹关掉VB也接受不到讯息
#11
wxyu2472015-02-16 14:35
是指C#吗,就第一次慢吧,后面好像差不多
#12
mhjuan1192015-03-02 09:31
回复 5楼 wxyu247
你试的怎么会都正常啊?这和电脑的系统有关系吗?应该如何修改啊?能单独联系你吗?
1