c文件中正确,cpp文件中则出错:cannot convert from 'void *' to 'unsigned char *',为什么?

MOOD 2007-06-21 08:47:40
HGLOBAL hMem ; // 缓存区句柄(从位图对象转到内存)
BYTE *hp; // 字节指针byte pointer

hp = hMem ;

VC编译时提示:
e:\编程\编程工作区\vc++\截屏\catscreen\capandsave.h(123) : error C2440: '=' : cannot convert from 'void *' to 'unsigned char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast

但如果是.C文件则没有关系,能顺利通过,如果是.cpp文件则出现上述错误...
...全文
1486 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
MOOD 2007-06-21
  • 打赏
  • 举报
回复
我很菜,全是拿别人的代码凑出来的,现在总是挂钩失败,不知道是不是错在这里,哪位可以指点一下?要不要把代码全发上来?
Inhibitory 2007-06-21
  • 打赏
  • 举报
回复
兄弟太粗心了,都是类型转换出错.
taodm 2007-06-21
  • 打赏
  • 举报
回复
你现在这个是错误。人家要你返回一个函数指针,而不是返回函数的调用结果。
再认真看看你的代码设计说明。
MOOD 2007-06-21
  • 打赏
  • 举报
回复
/////////////////////////////////
// HookFun鼠标钩子回调函数
/////////////////////////////////
EXPORT HOOKPROC CALLBACK HookFun(int nCode, WPARAM wParam, LPARAM lParam,
HWND hwnd, int cxSrc, int cySrc)
{

MessageBox(NULL, "钩子回调函数中", "info", MB_OK);
static POINT pt[MAXPOINTS] ;
int x, y ;
char* tmp = 0;

if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_LBUTTONDOWN:
x = LOWORD (lParam) ;
y = HIWORD (lParam) ;

itoa(x, tmp, 10);
//Cap(hwnd,100,100) ;
MessageBox(NULL, tmp, "info", MB_OK) ;
break ;
default:
break ;
}
}
return (long (__stdcall *)(int,unsigned int,long))CallNextHookEx (g_hHook, nCode, wParam, lParam) ;
}

不行啊,我的源码是这样的.又是强制转换才过的.
星羽 2007-06-21
  • 打赏
  • 举报
回复

LRESULT CALLBACK HookProc(int code, WPARAM wParam, LPARAM lParam)
{
。。。。。
。。。。。

return CallNextHookEx(g_hHook, code, wParam, lParam);
}
星羽 2007-06-21
  • 打赏
  • 举报
回复
return CallNextHookEx(g_hHook, code, wParam, lParam);
MOOD 2007-06-21
  • 打赏
  • 举报
回复
上面改成:
hp = (unsigned char *)hMem ;就不报错了

还有一个问题

return CallNextHookEx (g_hHook, nCode, wParam, lParam) ;

还提示:rjf

cannot convert from 'long' to 'long (__stdcall *)(int,unsigned int,long)'
  • 打赏
  • 举报
回复
强制转换,因为语法检查严格了许多
huashizhixin 2007-06-21
  • 打赏
  • 举报
回复
(unsigned char *)加前面就可以了
zzwh_0 2007-06-21
  • 打赏
  • 举报
回复
强制类型转换
晨星 2007-06-21
  • 打赏
  • 举报
回复
C中对指针类型转换的检查没有C++那么严格。

你一定要这样做的话,可以的C++中采用强制转换。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧