lala
驱动中牛
驱动中牛
  • 注册日期2001-04-26
  • 最后登录2006-10-18
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1137回复:5

诊断程序界面化的问题

楼主#
更多 发布于:2003-10-15 21:33
用VC++,WINDRIVER开发9054,
需要把采集来的灰度值作为图象显示出来,我作的是对话框程序
采用P9054_IntEnable(hPlx, PLX_IntHandlerRoutine);响应中断
如果发生中断,应该调用函数 WINAPI (),
在这个函数里,我设置了DMA读取数据,
然后想用CDC *pDC=GetDC();取得device context显示图象,
可是不行,说error C2660: \'GetDC\' : function does not take 0 parameters

我又想说把PLX_IntHandlerRoutine()设成对话框的成员函数void CPCI_testDlg::PLX_IntHandlerRoutine()
可是又报错,说error C2664: \'P9054_IntEnable\' : cannot convert parameter 2 from \'void (struct P9054_STRUCT *,P9054_INT_RESULT *)\' to \'void (__stdcall *)(struct P9054_STRUCT *,P9054_INT_RESULT *)\'
        None of the functions with this name in scope match the target type


我该怎么办?


另外INTCSR的bit21是DMA Channel 0 Interrupt Active
是什么意思?DMA本身就可以产生中断吗?

问题有点弱,看在我所有的分分上给我讲讲吧,
不要让我自己去看9054或者WINDRIVER的资料了,
我一直在看 可是没有硬软件的经验,看了也不太明白 :(

最新喜欢:

waangyanwaangy...
:D拉拉拉,拉拉拉,偶素待业的小青年...
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-10-16 20:06
天啦,多久没有见到lala啦,我还以为是别人呢 :D

如果GetDC是Win32 API(就是说,不是MFC的成员函数),那么GetDC的原型是:
HDC GetDC(
  HWND hWnd   // handle to window
);
要个HWND的。
估计你不是在某个MFC的class里面调GetDC,就被认为是Win32 API,于是error C2660: \'GetDC\' : function does not take 0 parameters

 :D

第二个呢,是因为类的成员函数不能当callback函数的(如果没有记错)。还是给个全局函数吧,在这个函数里面再call成员函数也可以啊 :D
lala
驱动中牛
驱动中牛
  • 注册日期2001-04-26
  • 最后登录2006-10-18
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-17 14:25
错误的道理我能理解
事情是这个样子的

我用对话框进行图象采集并且显示,
采用WINDRIVER,对PCI进行控制
在一个按纽响应ONDATA()里调用函数    P9054_IntEnable(hPlx, PLX_IntHandlerRoutine);// 这个是WINDRIVER封装的对芯片的中断响应函数,
其中PLX_IntHandlerRoutine是中断发生后调用的函数,
原型为void WINAPI PLX_IntHandlerRoutine(P9054_HANDLE hPlx, P9054_INT_RESULT *intResult)
我要在这个函数PLX_IntHandlerRoutine()里读取图象数据,
然后应该在这个函数里进行显示,因为这个函数是无返回类型的
可是直接CDC *pDC = GetDC();是不行的,
我要取得对话框的设备上下文
怎么办?
我用这个
    CPCI_testDlg dlg;
    CDC *pDC = dlg.GetDC();
可是有人说不行,因为dlg只是一个实例对象,它即没有初始化,也没有和窗口关联
建议我将CDC *pDC = dlg.GetDC();  改为
CDC *pDC = ((CPCI_testDlg*)(AfxGetApp()->GetMainWnd()))->GetDC();

可是我查MSDN,AfxGetApp好象是WIN CE 的函数,这样可以用吗?


呵呵~~终于看到熟人了,好啊好啊~~
没办法,总是做不出来,老师还总让我做驱动
而且又是没有硬件就让我先做驱动
郁闷ING~~~
:D拉拉拉,拉拉拉,偶素待业的小青年...
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-10-17 14:43
为什么要在这个callbakc函数画图年?

1、开个全局的data buffer,PLX_IntHandlerRoutine函数把数据往data buffer写,你的dialog的某个函数从这个data buffer读数据,显示。

2、和那个“有人”的方法是一样的。
CDC *pDC = ((CPCI_testDlg*)(AfxGetApp()->GetMainWnd()))->GetDC();
这样就可以画画了
 :D
等等。。。
AfxGetApp在WinCE也有,Win32也有。我知道你怎么看MSDN的 :D你是按F1,然后发现是for WinCE的函数,嘿嘿。你直接打开MSDN,在索引看看 ;)
lala
驱动中牛
驱动中牛
  • 注册日期2001-04-26
  • 最后登录2006-10-18
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-17 15:11
果然果然,我的VC6装的MSDN是for .NET的
用起来不是太习惯~ :D

我就先照那个“有人”的方法做了,能画出来就行,不行就再改吧~~

谢谢猫王GG,可是我咋不能给分分捏?不急不急,以后慢慢给吧 ;)
:D拉拉拉,拉拉拉,偶素待业的小青年...
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-10-17 15:32
不愧是lala,想骗点分好难啊 :D
游客

返回顶部