C#调用C++ dll指针的问题 调用C++中这个方法 int Comm_Frame_Rev(int device_no ,unsigned char *p_out)第二个参数应当怎么传,传StringBuilder获取不到值,传Intptr获取的值不对,传int 和long获取的值也不对,哎 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用 intptr,首先传入之前要初始化 以下所有向设备接收数据相关的函数都是调用这个函数。他是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的说明,哪位老大能给个例子么,我有点迷糊 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); } } } 取出来的值还是不对 愁死了 //將下方 ptr 當成 Comm_Frame_Rev 第二個參數傳進去IntPtr ptr = Marshal.AllocHGlobal(100);......//將 ptr 轉成你要的型態Marshal.PtrTo... unsigned char *p_out 傳 byte[] 或者 out IntPtr 試試。 [UnmanagedFunctionPointer(CallingConvention.Cdecl,CharSet=CharSet.Ansi)]外部引用编译器选的对不把c++和你的外部引用贴出了 用这个:int Comm_Frame_Rev(int device_no ,byte[] p_out); 100分问个ProgressBar显示百分比进度条 Webbrowser循环问题——在线等! 怎么把textbox.text的值以注册表Dword值的十进制写入到注册表里面呢? windowless? 进程间通信 照抄书上的例子(用C#写XML文件),为什么通不过呢? C#程序在WIN XP sp2下的打印问题 怎样通过类名查看类名所在的空间?(在线等.) 有关文件写入的一个问题 属性是用访问器有什么优点? 一个泛型可以用List<T>,那系统自带的两个泛型是用什么? 请问,如何获得控件所在的窗口
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的说明,哪位老大能给个例子么,我有点迷糊
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);
}
}
}
取出来的值还是不对 愁死了
//將下方 ptr 當成 Comm_Frame_Rev 第二個參數傳進去
IntPtr ptr = Marshal.AllocHGlobal(100);
...
...
//將 ptr 轉成你要的型態
Marshal.PtrTo...
外部引用编译器选的对不把c++和你的外部引用贴出了
int Comm_Frame_Rev(int device_no ,byte[] p_out);