【发布时间】:2011-09-23 13:24:32
【问题描述】:
我正在开发一个通过脚本访问的 mfc dll,所有这些都可以正常工作。我已经向它添加了一个多线程组件,并尝试使用 WriteFile() 函数写入我的串行端口,但是在执行第二个写入命令后,WriteFile() 函数以某种方式退出了应用程序。
没有多线程位,一切正常,我可以应用尽可能多的 writefile 命令。
多线程:我正在使用
CreateThread(NULL,0,WorkerThread,this,0,0);
创建我的线程。使用“WorkerThread”在后台执行前面描述的writefile操作。
此外,我需要使用 Sleep() 函数,同时按照我定义的时间间隔编写它。目前,程序在尝试使用 Sleep() 时退出。所以,我只是暂时删除了它,但稍后会需要它。
这是一个已知问题还是有一个显而易见的解决方案?
更新:我试图找到接近问题的地方,但仍然无法解决它。显然,我的 WriteFile() 参数似乎有问题。
WriteFile(theApp.m_hCom,tBuffer,sizeof(tBuffer),&iBytesWritten,NULL);
它没有正确地使用 sizeof(tBuffer),因此它正在崩溃。我检查了要传递的字符串,这完全等于我需要传递的字符串,但是如果我按照上面的方式编写代码(对于 WriteFile()),它会使程序崩溃。当我保持字符串长度,即手动将 sizeof(tBuffer) 参数设置为 14 时,程序运行但命令没有被执行,因为缓冲区的总字符串大小为 38。急需这方面的帮助。
CString sStore = "$ABCDEF,00000020,01000000C1200000*##\r\n";
char tBuffer[256];
memset(tBuffer,0,sizeof(tBuffer));
int Length = sizeof(TCHAR)* sStore.GetLength();
memcpy(&tBuffer,sStore.GetBuffer(),Length);
and then sending it with the WriteFile command.
WriteFile(theApp.m_hCom,tBuffer,sizeof(tBuffer),&iBytesWritten,NULL);
请告诉我。
提前致谢。
【问题讨论】:
-
请出示 tBuffer 的声明
-
我现在已经在编辑中添加了。抱歉我之前忘记了。
-
你为什么要做&tBuffer,应该只是tBuffer
-
使用 &tBuffer 有点奇怪,但应该不是问题。
-
您是通过脚本还是直接从 DLL 运行应用程序?
标签: c++ dll mfc serial-port msdn