解决方案 »
- 如何给菜单加Tooltip
- 如何创建[圆角、边框色彩渐变、边框宽度自定义]窗体
- crystal report自带vb实例的问题?
- 一个mshflexgrid的问题,会者请进。
- 用Findwindow找到一窗口hwnd,请问如何得到ThreadId
- 如何用winsock网络通信?
- :)各位大哥大姐:)怎样在Rtf控件中插入图片啊:)
- 如何将二进制图片发给远程目标?
- 关于installshield develop 的中文包.to(uguess)
- 请教Vb程序加载窗体时出现错误的通常原因,删除掉form1.log文件不会对以后有影响吧?
- 请教picturebox问题,大神请进,急急急……
- 调用vcdll的回调函数出现内存不可读的错误,怎么解决啊,在EnumSearchProc 函数体的结构体要怎么传递给各个函数
回调函数:
int CALLBACK EnumSearchProc(PDS_INFO dsinfo)
{
if (dsinfo == NULL)
return true; SearchInfo[search_count].dshdl = -1;
if (dsinfo->hwid == NE4100T) {
printf("Found: NE4100T\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
}else if (dsinfo->hwid == NE4110S) {
printf("Found: NE4110S\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
}else if (dsinfo->hwid == NE4110A) {
printf("Found: NE4110A\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
}else if (dsinfo->hwid == NE4120S) {
printf("Found: NE4120S\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
}else if (dsinfo->hwid == NE4120A) {
printf("Found: NE4120A\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
}else if (dsinfo->hwid == WE2100T_US) {
printf("Found: WE2100T_US\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
}else if (dsinfo->hwid == WE2100T_EU) {
printf("Found: WE2100T_EU\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
}else if (dsinfo->hwid == WE2100T_JP) {
printf("Found: WE2100T_JP\n");
memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
search_count++;
} return true;
}
For.....Next里面用了回调函数,而且这函数里面用了memcpy, 百分百要遇到内存读写错误,跑不掉的。
就相当于For....Next里面加了一个DoEvents,当第一个循环还在执行时,第二个、第三个循环就又开始执行起来了,机器忙不过来,就很容易冲突,就挂了。我以前就遇到过这样的问题。
for .... next 里面不要用回调函数,或者另想个办法吧。至少要按这个思路走: 内存读写操作要一个一个地进行,即第一个操作执行完毕了,才能再执行第二个,不然内存地址变化了,就极容易出现内存读取错误,或是写入错误。