2582|4

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C#调用Evc的dll问题 [复制链接]

EVC  dll中的导出函数原型为:
   int  __stdcall  CommSend(char *function, char *data)

请问而再C#中调用的时候该如何处理指针的参数? 以下是我试验的三种方法,编译通过但是设备没有反应啊!

         [DllImport("SunCf.dll")]
        //public static extern int CommSend(String function, String data);
        //public static extern int CommSend(IntPtr function, IntPtr data);
        public static extern int CommSend(char[] function, char[] data);



和我有统统问题的帖子,虽然楼主已解决,可是并没有写入如何解决 ,真是让人着急啊!还望各位高人不吝赐教啊!

最新回复

我已经自己解决了:   private void button3_Click(object sender, EventArgs e)  //写入某页内容         {             try             {                 string strtxt = textBox2.Text.ToString();                 if (strtxt.Length < 32)    //写入的byte数据长度必须为32字节,否则责要做处理!                 {                     if (strtxt.Length == 0)                     {                         textBox1.Text = "您没有输入任何数据!";                         return;                     }                     else                     {                         strtxt = strtxt.PadLeft(32, '0');                     }                    }                 else if (strtxt.Length > 32)                 {                     strtxt = strtxt.Remove(32, strtxt.Length - 32);                 }                 string f = "K1";                 string d = "M" + comboBox1.Text.ToString()+strtxt;                 byte[] mbytx = new byte[f.Length];                 byte[] mbyrx = new byte[d.Length];                 ASCIIEncoding objEncoder = new ASCIIEncoding();                 mbytx = objEncoder.GetBytes(f);                 mbyrx = objEncoder.GetBytes(d);                 byte[] function = new byte[10];                 byte[] data = new byte[100];                 if (CommSend(mbytx, mbyrx) == 1)                 {                     if (CommRece(function, data) == 1)                     {                         string str = System.Text.Encoding.Default.GetString(data, 0, 99);                         textBox1.Text = "写入成功!";                     }                     else                     {                         textBox1.Text = "写入失败!";                     }                 }                 else                 {                     textBox1.Text = "写入超时!";                 }             }             catch             {                 textBox1.Text = "异常发生!";             }                                 }         private void button4_Click(object sender, EventArgs e)  //读取某页内容         {             try             {                 string f = "K0";                 string d = "M"+comboBox1.Text.ToString();                 byte[] mbytx = new byte[f.Length];                 byte[] mbyrx = new byte[d.Length];                 ASCIIEncoding objEncoder = new ASCIIEncoding();                 mbytx = objEncoder.GetBytes(f);                 mbyrx = objEncoder.GetBytes(d);                 byte[] function = new byte[10];                 byte[] data = new byte[100];                 if (CommSend(mbytx, mbyrx) == 1)                 {                     if (CommRece(function, data) == 1)                     {                         string str = System.Text.Encoding.Default.GetString(data, 0, 99);                         textBox2.Text = str.Remove(0, 4);                         textBox1.Text = "读取成功!";                     }                     else                     {                         textBox1.Text = "读取失败!";                     }                 }                 else                 {                     textBox1.Text = "读取超时!";                 }             }             catch             {                 textBox1.Text = "异常发生!";             }               }  详情 回复 发表于 2008-1-30 23:59
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
和我有统统问题的帖子的地址:
http://groups.eeworld.net/aawolf_Mobile/topic/0c26abea-9aca-44c9-92c8-4234b314e153.aspx
但是楼主并没有写出是如何解决的啊!
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
C#中没有指针,好像是比较麻烦。
没有研究过,帮顶...
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
看来真的没有人弄过了啊!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
我已经自己解决了:  

private void button3_Click(object sender, EventArgs e)  //写入某页内容
        {
            try
            {
                string strtxt = textBox2.Text.ToString();
                if (strtxt.Length < 32)    //写入的byte数据长度必须为32字节,否则责要做处理!
                {
                    if (strtxt.Length == 0)
                    {
                        textBox1.Text = "您没有输入任何数据!";
                        return;
                    }
                    else
                    {
                        strtxt = strtxt.PadLeft(32, '0');
                    }   
                }
                else if (strtxt.Length > 32)
                {
                    strtxt = strtxt.Remove(32, strtxt.Length - 32);
                }
                string f = "K1";
                string d = "M" + comboBox1.Text.ToString()+strtxt;
                byte[] mbytx = new byte[f.Length];
                byte[] mbyrx = new byte[d.Length];
                ASCIIEncoding objEncoder = new ASCIIEncoding();
                mbytx = objEncoder.GetBytes(f);
                mbyrx = objEncoder.GetBytes(d);
                byte[] function = new byte[10];
                byte[] data = new byte[100];

                if (CommSend(mbytx, mbyrx) == 1)
                {
                    if (CommRece(function, data) == 1)
                    {
                        string str = System.Text.Encoding.Default.GetString(data, 0, 99);
                        textBox1.Text = "写入成功!";
                    }
                    else
                    {
                        textBox1.Text = "写入失败!";
                    }
                }
                else
                {
                    textBox1.Text = "写入超时!";
                }
            }
            catch
            {
                textBox1.Text = "异常发生!";
            }
           
           
        }

        private void button4_Click(object sender, EventArgs e)  //读取某页内容
        {
            try
            {
                string f = "K0";
                string d = "M"+comboBox1.Text.ToString();
                byte[] mbytx = new byte[f.Length];
                byte[] mbyrx = new byte[d.Length];
                ASCIIEncoding objEncoder = new ASCIIEncoding();
                mbytx = objEncoder.GetBytes(f);
                mbyrx = objEncoder.GetBytes(d);
                byte[] function = new byte[10];
                byte[] data = new byte[100];

                if (CommSend(mbytx, mbyrx) == 1)
                {
                    if (CommRece(function, data) == 1)
                    {
                        string str = System.Text.Encoding.Default.GetString(data, 0, 99);
                        textBox2.Text = str.Remove(0, 4);
                        textBox1.Text = "读取成功!";
                    }
                    else
                    {
                        textBox1.Text = "读取失败!";
                    }
                }
                else
                {
                    textBox1.Text = "读取超时!";
                }
            }
            catch
            {
                textBox1.Text = "异常发生!";
            }      
        }
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表