开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 314|回复: 15
收起左侧

[C/C++] 这些代码怎么转化为易语言代码?

[复制链接]
结帖率:83% (85/103)
发表于 2024-5-23 14:37:20 | 显示全部楼层 |阅读模式   安徽省合肥市
500精币
这段代码,如何转化为易语言代码呢?DWORD WINAPI CHIDCom::RecvProc(LPVOID lpParameter){//接收参数CHIDCom *pThis = (CHIDCom *)lpParameter;ULONG len;//初始化线程和私有堆if( !CH9326InitThreadData(pThis->m_hHID) ){    AfxMessageBox("接收初始化失败");    return 0;}HANDLE hEventObject=CreateEvent(NULL,TRUE,TRUE,"");//根据SDK要求创建时间对象//HID发送if( FALSE == CH9326WriteData( m_hHID, m_SendBuffer, 31, hEventObject ) )//发送数据{AfxMessageBox(“发送失败”);CloseHandle(hEventObject);//关闭时间对象句柄return;}//发送成功CloseHandle(hEventObject);//关闭时间对象句柄return;//读线程中数据while(1){    len = sizeof(pThis->m_ReceiveBuffer);    if( FALSE == CH9326ReadThreadData(pThis->m_hHID,pThis->m_ReceiveBuffer,&len) )//接收数据    {        AfxMessageBox("接收函数调用失败,请关闭软件重新运行");//拔掉设备时会提示        break;    }    if(len != 0)    {    //收到数据        …………//处理步骤                        }}//停止内部线程读取CH9326StopThread(pThis->m_hHID);//返回return 0;}


补充内容 (2024-5-23 14:39):
排版出问题了,可以看下面的


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:83% (85/103)

签到天数: 13 天

 楼主| 发表于 2024-5-23 14:39:28 | 显示全部楼层   安徽省合肥市
DWORD WINAPI CHIDCom::RecvProc(LPVOID lpParameter)
{
//接收参数
CHIDCom *pThis = (CHIDCom *)lpParameter;

ULONG len;

//初始化线程和私有堆
if( !CH9326InitThreadData(pThis->m_hHID) )
{
    AfxMessageBox("接收初始化失败");
    return 0;
}
HANDLE hEventObject=CreateEvent(NULL,TRUE,TRUE,"");//根据SDK要求创建时间对象
//HID发送
if( FALSE == CH9326WriteData( m_hHID, m_SendBuffer, 31, hEventObject ) )//发送数据
{
AfxMessageBox(“发送失败”);
CloseHandle(hEventObject);//关闭时间对象句柄
return;
}
//发送成功
CloseHandle(hEventObject);//关闭时间对象句柄
return;
//读线程中数据
while(1)
{
    len = sizeof(pThis->m_ReceiveBuffer);
    if( FALSE == CH9326ReadThreadData(pThis->m_hHID,pThis->m_ReceiveBuffer,&len) )//接收数据
    {
        AfxMessageBox("接收函数调用失败,请关闭软件重新运行");//拔掉设备时会提示
        break;
    }
    if(len != 0)
    {    //收到数据
        …………//处理步骤                    
    }
}
//停止内部线程读取
CH9326StopThread(pThis->m_hHID);
//返回
return 0;
}
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 23 天

发表于 2024-5-23 15:32:22 | 显示全部楼层   辽宁省朝阳市
xinhan2012 发表于 2024-5-23 14:39
DWORD WINAPI CHIDCom::RecvProc(LPVOID lpParameter)
{
//接收参数

你这段代码 没什么实质的内容啊。就几个函数 调用,什么都看不到。
回复

使用道具 举报

结帖率:83% (85/103)

签到天数: 13 天

 楼主| 发表于 2024-5-23 16:10:05 | 显示全部楼层   安徽省合肥市
weidongjun 发表于 2024-5-23 15:32
你这段代码 没什么实质的内容啊。就几个函数 调用,什么都看不到。

CHIDCom *pThis = (CHIDCom *)lpParameter

这一句是干啥的?易语言怎么写?
回复

使用道具 举报

结帖率:91% (193/211)

签到天数: 25 天

发表于 2024-5-23 16:52:24 | 显示全部楼层   广西壮族自治区崇左市
DWORD WINAPI CHIDCom::RecvProc(LPVOID lpParameter)
{
//接收参数
CHIDCom *pThis = (CHIDCom *)lpParameter;

ULONG len;

//初始化线程和私有堆
if( !CH9326InitThreadData(pThis->m_hHID) )
{
    AfxMessageBox("接收初始化失败");
    return 0;
}
HANDLE hEventObject=CreateEvent(NULL,TRUE,TRUE,"");//根据SDK要求创建时间对象
//HID发送
if( FALSE == CH9326WriteData( m_hHID, m_SendBuffer, 31, hEventObject ) )//发送数据
{
AfxMessageBox(“发送失败”);
CloseHandle(hEventObject);//关闭时间对象句柄
return;
}
//发送成功
CloseHandle(hEventObject);//关闭时间对象句柄
return;
//读线程中数据
while(1)
{
    len = sizeof(pThis->m_ReceiveBuffer);
    if( FALSE == CH9326ReadThreadData(pThis->m_hHID,pThis->m_ReceiveBuffer,&len) )//接收数据
    {
        AfxMessageBox("接收函数调用失败,请关闭软件重新运行");//拔掉设备时会提示
        break;
    }
    if(len != 0)
    {    //收到数据
        …………//处理步骤                    
    }
}
//停止内部线程读取
CH9326StopThread(pThis->m_hHID);
//返回
return 0;
}翻译下


补充内容 (2024-5-23 16:53):
请忽略这个,发错了而已
回复

使用道具 举报

结帖率:83% (85/103)

签到天数: 13 天

 楼主| 发表于 2024-5-23 16:53:00 | 显示全部楼层   安徽省合肥市
DWORD WINAPI CHIDCom::RecvProc(LPVOID lpParameter)
这是CHIDCom类的一个成员函数,名为RecvProc,它接收一个LPVOID类型的参数lpParameter。DWORD WINAPI是线程函数的返回类型和调用约定,表示这个函数将返回一个32位无符号整数,并且遵循Windows API的调用约定。

cpp
CHIDCom *pThis = (CHIDCom *)lpParameter;
这里,lpParameter被强制转换为CHIDCom类的指针,并将其赋值给pThis。这通常是在创建线程时传递给线程函数的上下文参数,允许线程函数访问创建它的对象的成员。

cpp
ULONG len;
定义了一个ULONG类型的变量len,用于存储接收到的数据的长度。

cpp
if( !CH9326InitThreadData(pThis->m_hHID) )
{
    AfxMessageBox("接收初始化失败");
    return 0;
}
这里调用了一个名为CH9326InitThreadData的函数,它可能是用于初始化与HID设备相关的线程数据。如果初始化失败,会弹出一个消息框显示“接收初始化失败”,并返回0,结束线程。

cpp
while(1)
{
    len = sizeof(pThis->m_ReceiveBuffer);
    if( FALSE == CH9326ReadThreadData(pThis->m_hHID,pThis->m_ReceiveBuffer,&len) )
    {
        AfxMessageBox("接收函数调用失败,请关闭软件重新运行");
        break;
    }
    if(len != 0)
    {   
        //收到数据
        //处理步骤
    }
}
这是一个无限循环,用于持续读取来自HID设备的数据。

首先,len被设置为m_ReceiveBuffer的大小。
然后,调用CH9326ReadThreadData函数尝试从HID设备读取数据到m_ReceiveBuffer,并将实际读取到的数据长度存储在len中。
如果读取失败,会弹出一个消息框并退出循环。
如果读取到的数据长度len不为0,表示成功接收到数据,接下来会进行数据处理(这部分代码没有给出)。
cpp
CH9326StopThread(pThis->m_hHID);
退出循环后,调用CH9326StopThread函数停止与HID设备相关的线程读取操作。

cpp
return 0;
最后,函数返回0,表示线程结束。
回复

使用道具 举报

结帖率:83% (85/103)

签到天数: 13 天

 楼主| 发表于 2024-5-23 16:53:54 | 显示全部楼层   安徽省合肥市
police0909 发表于 2024-5-23 16:52
DWORD WINAPI CHIDCom::RecvProc(LPVOID lpParameter)
{
//接收参数

翻译需要审核,等看下楼
回复

使用道具 举报

结帖率:91% (193/211)

签到天数: 25 天

发表于 2024-5-23 16:57:55 | 显示全部楼层   广西壮族自治区崇左市
顺手帮你翻译下,好像没什么可翻译的,只是一个多线程调用。

DWORD WINAPI CHIDCom::RecvProc(LPVOID lpParameter)
{
//接收参数
CHIDCom *pThis = (CHIDCom *)lpParameter;

ULONG len;

//初始化线程和私有堆
if( !CH9326InitThreadData(pThis->m_hHID) )
{
    AfxMessageBox("接收初始化失败");
    return 0;
}
HANDLE hEventObject=CreateEvent(NULL,TRUE,TRUE,"");//根据SDK要求创建时间对象
//HID发送
if( FALSE == CH9326WriteData( m_hHID, m_SendBuffer, 31, hEventObject ) )//发送数据
{
AfxMessageBox(“发送失败”);
CloseHandle(hEventObject);//关闭时间对象句柄
return;
}
//发送成功
CloseHandle(hEventObject);//关闭时间对象句柄
return;
//读线程中数据
while(1)
{
    len = sizeof(pThis->m_ReceiveBuffer);
    if( FALSE == CH9326ReadThreadData(pThis->m_hHID,pThis->m_ReceiveBuffer,&len) )//接收数据
    {
        AfxMessageBox("接收函数调用失败,请关闭软件重新运行");//拔掉设备时会提示
        break;
    }
    if(len != 0)
    {    //收到数据
        …………//处理步骤                    
    }
}
//停止内部线程读取
CH9326StopThread(pThis->m_hHID);
//返回
return 0;
}


这个函数RecvProc的主要目的是在一个Windows线程中处理与HID(Human Interface Device)设备的通信。具体来说,它执行以下任务:

接收参数:函数接收一个LPVOID类型的参数lpParameter,并将其强制转换为CHIDCom类的指针pThis。这个指针通常用于访问CHIDCom类的成员变量和成员函数。
初始化线程和私有堆:调用CH9326InitThreadData函数(可能是某个SDK提供的函数)来初始化与HID设备通信的线程数据和私有堆。如果初始化失败,它会显示一个消息框并返回0。
创建事件对象:使用CreateEvent函数创建一个事件对象,这个对象可能用于同步或通知机制。然而,在当前代码段中,事件对象在发送数据后立即被关闭,这可能意味着它在这个特定函数中的用途有限。
发送数据:调用CH9326WriteData函数(同样是SDK提供的函数)来向HID设备发送数据。发送的数据来自m_SendBuffer,长度固定为31字节。如果发送失败,它会显示一个消息框并关闭事件对象句柄,然后返回。
接收数据:在发送数据后(尽管这可能不是最佳顺序),函数进入一个无限循环,尝试从HID设备接收数据。它调用CH9326ReadThreadData函数来读取数据,并检查返回的数据长度。如果读取失败或没有数据,它会显示一个错误消息并退出循环。
处理接收到的数据:如果接收到数据(即数据长度不为0),函数会执行一些处理步骤(在注释//处理步骤的位置)。这些步骤的具体内容没有在代码段中给出。
停止内部线程读取(理论上):尽管代码中有CH9326StopThread的调用,但它实际上在while循环之后,因此在实际执行中永远不会被调用。如果这个函数是用来停止与HID设备通信的线程,那么它应该被移动到循环之前或设计一个适当的退出条件。
返回:函数返回0,表示线程执行完毕。然而,由于存在无限循环,这通常不会发生,除非接收到一个错误或外部条件导致线程被终止。
总的来说,这个函数是一个处理HID设备通信的线程函数,负责发送数据、接收数据并处理接收到的数据。然而,它可能需要一些调整来确保正确的执行顺序和错误处理。
回复

使用道具 举报

结帖率:91% (193/211)

签到天数: 25 天

发表于 2024-5-23 17:00:47 | 显示全部楼层   广西壮族自治区崇左市
xinhan2012 发表于 2024-5-23 16:53
翻译需要审核,等看下楼

不用,我自己翻译了,看了下,这个好像没什么翻译的,直接用多线程就好了,
代码转换,无非就是找个相同的功能替换。有现成的多线程可以用,
C代码翻译.txt (3.43 KB, 下载次数: 0)
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 23 天

发表于 2024-5-23 17:33:56 | 显示全部楼层   辽宁省朝阳市
xinhan2012 发表于 2024-5-23 16:10
CHIDCom *pThis = (CHIDCom *)lpParameter

这一句是干啥的?易语言怎么写?

指针强转成CHIDCom 的指针。

补充内容 (2024-5-23 17:40):
易语言就是copy内存,取出自定义类型的 内存地址,取变量地址,然后指针到字节集 把这个字节集给赋值到 自定义类型的 内存地址里 就行了

补充内容 (2024-5-23 17:42):
注意内存长度。C++中sizeof(CHIDCom ) 就知道了
回复

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表