本帖最后由 VisualEleven 于 2013-10-22 16:23:01 编辑

解决方案 »

  1.   

    你VC里参数是用指针,但C#默认是不能用指针的,这就是个传参数问题,你可以这么试试:
    1。
    让C#可以使用指针,好象需要设置不安全就可以用指针,具体C#如何使用指针,你查一下
    2。
    VC6里设个保存数据变量,VC6里读出的数据存在这个变量里,C#直接从这个变量里取数据
    3。
    C#也可以直接使用MSCOMM32这个控件,我试试没问题,而且效率比C#本身自带的要高得多、要好得多,原先C#里自带的串口控件有问题,效率太低,数据一多就得等会才能收全,而用MSCOMM这个控件就不存在这个问题
      

  2.   

    vc里面另外写了个方法
    unsigned char* getXX()
    {
    unsigned char* m_buf;
    ReadSerial(m_buf, 256);
    return m_buf;
    }
    这样在c#里面就没有传什么参数了,直接调用getXX()
    我用线程接收数据,但是提示 : 无法封送处理“return value”: 无效的托管/非托管类型组合。
      

  3.   

    线程是不能调用其它控件或第三方的DLL(并不是所有的DLL),所以你可以查一下如何在C#线程里调用控件,代码也不多,涉及到一个函数Invoke
      

  4.   

    谢谢回复,现在我不用线程了,就是简单的发一下,收一下。。
    可是还是提示 无法封送处理“return value”: 无效的托管/非托管类型组合代码就是按钮按下执行:
    char[] c = "123456".ToCharArray();
    WriteSerial(c, c.Length);//可以发送,串口助手收到数据后,回发了数据
    char[] c = getXX();//这里提示错误信息
    if (c != null && c.Length > 0)
        Console.WriteLine(new string(c));
      

  5.   

    unsigned char* getXX()
    {
    unsigned char* m_buf;
    ReadSerial(m_buf, 256);
    return m_buf;
    }m_buf没有分配空间,返回这个指针就是野指针。查查串口设置的模式。在vc下面调通了再挪到C#调用。
      

  6.   

    你返回的是指针,因此还得让C#可以使用指针才行,你查一下C#如何使用指针,然后在C#里定义指针:char* c = getXX();//
      

  7.   

    vc的是要做成dll,C#的调用尽量简单,不能用到指针,就是调用一下getXX()就获取到一个字符串。。
    那在vc里面怎么改那个getXX
    unsigned char* m_buf;这个分配空间了也是一样
      

  8.   

    1。
    C#里用指针也简单,在工程属性里加改一个地方,改成“非安全”就行了
    2。
    VC里还是传指针参数,C#里调用时参数加上ref试试
      

  9.   

    http://www.cnblogs.com/EdmundDwyane/p/3174308.html
      

  10.   

    两年前 也用过C#  o(∩_∩)o 哈哈~~
      

  11.   

    串口助手CommAssist
    http://www.cnblogs.com/EdmundDwyane/p/3443074.html