VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 3402|回复: 19

[求助] VB和c#通信,VB接收问题

[复制链接]
发表于 2015-3-2 10:04:05 | 显示全部楼层 |阅读模式
本帖最后由 mhjuan119 于 2015-3-2 11:35 编辑



两个程序之间用WM_COPYDATA方法传递数据,现在VB向c#发送数据,c#可以正常接收(不管VB发送的数据有多长);c#向VB发送的数据长度小于50,VB能正常接收。问题是c#向VB发送的数据长度大于50的话,VB只能接收前50个,不知道问题出现在哪,请各位高手帮忙看一下,也可qq联系我45262121,另源程序代码附上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2015-3-2 11:51:55 | 显示全部楼层
上传的时候源代码有点问题,重新上传了一下,可以了。高手们请尽情回答,谢谢了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-2 14:23:40 | 显示全部楼层
怎么没人回答啊,高手回复一下呗,在线等
回复 支持 反对

使用道具 举报

发表于 2015-3-2 16:23:30 | 显示全部楼层
WM_COPYDATA 不可能出现这个问题,答案只有一个,c#缓冲区只有50个,余下的根本没发.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-2 16:37:02 | 显示全部楼层
那是怎么回事,你帮我看一下吧,看看是哪里的问题,这个问题已经困扰了好久了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-2 16:40:40 | 显示全部楼层
是c#的发送代码有问题吗?
private void btnSend_Click_1(object sender, EventArgs e)
        {
            string s1 = textBox2.Text;
            int WINDOW_HANDLER = FindWindow(null, @s1);
            textBox4.Text = WINDOW_HANDLER.ToString();
            textBox1.Text = textBox9.Text + ","+ textBox10.Text + "," + textBox11.Text + "," + textBox12.Text;
            if (WINDOW_HANDLER != 0)
            {
                byte[] sarr = System.Text.Encoding.Default.GetBytes(this.textBox1.Text);      
                int len = sarr.Length;
                COPYDATASTRUCT cds;
                //cds.lpData = int.Parse (this.textBox1.Text);                //?
                cds.lpData = this.textBox1.Text;
                cds.dwData =(IntPtr)100;  //为何数值为几都正确???   //
                cds.cbData = len + 1;
                string s = comboBox1.SelectedItem.ToString();
                int i = WM_COPYDATA;
                switch (s)
                {
                    case "WM_COPYDATA":
                        i = WM_COPYDATA;
                        SendMessage(WINDOW_HANDLER, i, 0, ref cds);
                        break;
                    case "WM_MY1":
                        i = WM_MY1;
                        int k;
                        bool b = clsControl.IsNumber(textBox1.Text);
                        if (b == true)
                            k = int.Parse(textBox1.Text);
                        else
                            k = 1000;
                        PostMessage(WINDOW_HANDLER, i, 0, k);
                        break;
                     }
                 }
         }
回复 支持 反对

使用道具 举报

发表于 2015-3-2 17:12:44 | 显示全部楼层
本帖最后由 dxs 于 2015-3-2 17:32 编辑

dwData,cbData ,lpData 之间没有必然联系 dwData,cbData 是数值,lpData 是数据指针,lpData会被系统转化,两个程序中数值是不样的,  数据结构中lp开头的基本代表指针.可能是textBox1.Text设置了最大字符数,或者这句cds.lpData = this.textBox1.Text; lpData 是数据指针,不能等于字符串
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-3 09:51:03 | 显示全部楼层
textbox1的长度设置如附件所示,另lpdata如果不能等于字符串那为什么能发送数据,现在问题就是发送数据长度超过50就只能接收前50个字符

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2015-3-3 10:43:32 | 显示全部楼层
lz不使用代码,直接使用拷贝-黏贴的方法试试看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-3 11:51:44 | 显示全部楼层
你的意思是直接将c#文门框中的内容复制在VB中吗?还是?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-5 11:05

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表