调用C++中这个方法 int Comm_Frame_Rev(int device_no ,unsigned char *p_out)
第二个参数应当怎么传,传StringBuilder获取不到值,传Intptr获取的值不对,传int 和long获取的值也不对,哎

解决方案 »

  1.   

    用 intptr,首先传入之前要初始化
      

  2.   

    以下所有向设备接收数据相关的函数都是调用这个函数。他是API函数中最基本函数。序号 名称 说明
    1 函数原型 int Comm_Frame_Rev(int device_no ,unsigned char *p_out)
    2 函数名称 解帧函数(完成通讯协议解包功能)
    3 函数说明 主要完成数据解包功能,包括数据的恢复、校验、解帧;
    这是最基本的API函数,数据的接收都是这个函数完成。
    4 支持的协议版本 20081008协议版本
    5 支持的设备型号 JRF253T产品
    6 输入参数 int device_no:连接成功通道序号,是调用Open_Comm_Port函数的返回值。
    7 输出参数 unsigned char *p_out:接收数据输出指针。
     *(p_out+0): 表示接收到设备地址0;
     *(p_out+1): 表示接收到设备地址1;
     *(p_out+2): 表示接收到特征字;
     *(p_out+3): 表示接收到功能号;
     *(p_out+4)… *(p_out+n): 表示接收到内容;
    8 函数返回参数  返回-2: 表示接收到一帧数据,但校验有错;
     返回-1: 表示通讯口没有连接;
     返回0: 表示接收失败(没有返回信息);
     返回>0: 表示成功接收到的数据长度。
    这是调用API的说明,哪位老大能给个例子么,我有点迷糊
      

  3.   


            private void GetCarId()
            {
                unsafe
                {
                    char* p_out = stackalloc char[100];
                    while (true)
                    {
                        int m = Comm_Frame_Rev(device_no, p_out);
                        char s = *(p_out+3);
                      
                    }
                }
            }
     取出来的值还是不对 愁死了
      

  4.   


    //將下方 ptr 當成 Comm_Frame_Rev 第二個參數傳進去
    IntPtr ptr = Marshal.AllocHGlobal(100);
    ...
    ...
    //將 ptr 轉成你要的型態
    Marshal.PtrTo...
      

  5.   

    unsigned char *p_out 傳 byte[] 或者 out IntPtr 試試。
      

  6.   

    [UnmanagedFunctionPointer(CallingConvention.Cdecl,CharSet=CharSet.Ansi)]
    外部引用编译器选的对不把c++和你的外部引用贴出了
      

  7.   

    用这个:
    int Comm_Frame_Rev(int device_no ,byte[] p_out);