打印

Cypress的USB库

[复制链接]
6017|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuxh|  楼主 | 2011-1-2 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个由VC6迁移到VC2008SP1的工程。
使用了Cypress的USB库:CyUSB.lib(静态链接,无dll文件)
在主线程中我new了一个字符串,然后作为参数,传递给线程,线程中使用该字符串,然后delete[],结果引发异常。
沙发
juventus9554| | 2011-1-2 15:58 | 只看该作者
你的设置?

使用特权

评论回复
板凳
chuxh|  楼主 | 2011-1-2 16:35 | 只看该作者
工程设置:Debug multithread DLL(/MDd)改用GlobalAlloc/GlobalFree依然无济于事。

使用特权

评论回复
地板
chuxh|  楼主 | 2011-1-2 17:06 | 只看该作者
我认为CyUSB.lib可能静态链接到了CRT库,而我的版本是使用动态链接。

使用特权

评论回复
5
juventus9554| | 2011-1-2 17:42 | 只看该作者
改下工程设置

使用特权

评论回复
6
chuxh|  楼主 | 2011-1-2 17:47 | 只看该作者
设置为“静态使用MFC、使用CRT库的多线程非DLL版本”,依然会报错。在VC6中一切正常。

使用特权

评论回复
7
小小猫咪| | 2011-1-2 18:25 | 只看该作者
你的代码看看

使用特权

评论回复
8
pangb| | 2011-1-2 18:31 | 只看该作者
是否存在SendCommand中没有运行case CONFIG_EMULATOR:里面的语句就到后面创建函数的代码啦的情况

使用特权

评论回复
9
houcs| | 2011-1-2 19:28 | 只看该作者
估计与Unicode字符集有关,你把项目改成多字节字符集验证一下。

使用特权

评论回复
10
llljh| | 2011-1-2 19:29 | 只看该作者
对,另外再调试一下,开一个内存窗口,监视从lpszPathName-0x20开始的内存,看看执行过程中是否发生变化。

使用特权

评论回复
11
pangb| | 2011-1-2 20:00 | 只看该作者
建议好好看一下CCyUSBDevice的说明文档。

使用特权

评论回复
12
小小猫咪| | 2011-1-2 20:22 | 只看该作者
你要delete的指针是在SendCommand中由CCyUSBDevice作为参数传给你的,我说的没错吧。

使用特权

评论回复
13
houcs| | 2011-1-2 20:41 | 只看该作者
那么你知道这个指针在CCyUSBDevice中是如何创建的?

使用特权

评论回复
14
morrisk| | 2011-1-2 20:57 | 只看该作者
至少你怎么知道要用delete []而不是delete?

使用特权

评论回复
15
zwll| | 2011-1-2 21:09 | 只看该作者
甚至可能你根本不用自己释放,CCyUSBDevice会自己释放。

使用特权

评论回复
16
司徒老鹰| | 2011-1-2 21:26 | 只看该作者
一个很重要很容易出你这种问题的做法是在dll中分配内存在exe中释放,这是非常不推荐的

使用特权

评论回复
17
chuxh|  楼主 | 2011-1-2 21:39 | 只看该作者
为什么啊?

使用特权

评论回复
18
zyf部长| | 2011-1-2 21:49 | 只看该作者
在dll中提供释放的函数供exe调用,也就是分配和释放都要在一个dll中进行

使用特权

评论回复
19
chuxh|  楼主 | 2011-1-2 21:58 | 只看该作者
举个例子

使用特权

评论回复
20
zyf部长| | 2011-1-2 22:04 | 只看该作者
void* CCyUSBDevice::Alloc()
{
return new char[20];
}
void CCyUSBDevice::Release(void *p)
{
delete [] p;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

粉丝