阅读:2319回复:6
那位用过WinDriver生成的Code程序呀
我是一个新手,用WinDriver生成了一个低速USB设备的Code代码,单独编译正常,可我想吧它加到MFC生成的工程里,可编译总是报错,
error C2440: '=' : cannot convert from 'unsigned long (__cdecl *)(struct XXXX_STRUCT *,void *,unsigned long)' to 'unsigned long (__cdecl *)(void *,void *,unsigned long)' This conversion requires a reinterpret_cast, a C-style cast or function-style cast "XXXX"代表我的工程名,那句出错的语句是: listenPipe.read_pipe_func = XXXX_ReadPipe81 ; 可我发现 XXXX_ReadPipe81 是一个函数,函数定义是 DWORD XXXX_ReadPipe81(XXXX_HANDLE hGAMEPORT, PVOID pBuffer, DWORD dwSize); 而read_pipe_func是定义在usb_diag_lib.h中的,定义是 typedef DWORD (*READ_PIPE_FUNC)(HANDLE hDevice, PVOID pBuffer, DWORD dwSize); 我实在是搞不明白怎么回事了,那位高手可以给我传授些经验呀,叫我一下该怎么吧生成的控制台程序加到MFC工程中,还有那个问题是怎么回事呀 |
|
最新喜欢:![]()
|
沙发#
发布于:2001-07-04 12:04
你必须在所有的windriver 生成的code中增加#include "stdafx.h"
才能够正常使用MFC。然后将其他不兼容的部分进行修改 |
|
板凳#
发布于:2001-07-04 12:21
不能直接用windows的HANDLE, 要用XXXDRV_HANDLE, 这是两个区别很大的类型, XXXDRV_HANDLE由windriver生成
(或用强制类型转换) |
|
地板#
发布于:2001-07-04 13:06
我知道HANDLE和XXX_HANDLE不同,可我应该怎么做才能不使用HANDLE呀,在usb_diag_lib.h中重定义呢还是在stdafx.h中重定义呢,还有如何强制类型转换,可不可以教教我呀,我试过不成功,还有有那些是不兼容的,需要如何修改呢?
[sunhui 编辑于 2001-07-04 13:13] |
|
|
地下室#
发布于:2001-07-04 16:26
你强制 listenPipe.read_pipe_func = (READ_PIPE_FUNC)(XXXX_ReadPipe81 ;
试一下。 我也试过WinDriver生成的程序,赋值不兼容,强制一下就好了。 |
|
|
5楼#
发布于:2001-07-05 09:30
谢谢,我的程序已编译通过了,当然还有些问题,以后再向你请教
|
|
|
6楼#
发布于:2001-07-09 16:37
我现在又遇到新问题了,我需要监听pipe81,可每次创建监听线程时都不太正常,传到 PipeListenHandler(void * pParam)的参数负值都负不过去,也就是pListenPipe= (USB_LISTEN_PIPE*) pParam,总是说pListenPipe->fStopped=true; 可我明明给它负了falsel,还有
有时明明值都负对了,可已运行过PVOID buf = malloc(m_pListenPipe->dwPacketSize);pListenPipe得值就变了,要不就会死在 DWORD dwBytesTransfered = m_pListenPipe->read_pipe_func(m_pListenPipe->hDevice, buf, m_pListenPipe->dwPacketSize);这句上,我都不知该怎么办了,这可都是WinDriver生成的标准代码呀,而且在DOS下运行正常,可一加到MFC里就出错,也不知道是那些地方不兼容,那位用过WinDriver可以传授给我一些经验呀,谢了! |
|
|