一个有关没有定义的编译问题,请各位大虾看看
50zhou80bin]
编辑:www.fx114.net
本篇文章主要介绍了"一个有关没有定义的编译问题,请各位大虾看看
50zhou80bin]",主要涉及到一个有关没有定义的编译问题,请各位大虾看看
50zhou80bin]方面的内容,对于一个有关没有定义的编译问题,请各位大虾看看
50zhou80bin]感兴趣的同学可以参考一下。
问题是这样的
class&CMainFrame&:&public&CFrameWnd
//中定义了一个函数
bool&DoRegisterDeviceInterface(GUID&&&InterfaceClassGuid,HDEVNOTIFY&*hDevNotify);
//这个函数在msdn有,实际是RegisterDeviceNotification的一个例子
//其中的两个参数,我又分别定义成了,类的私有成员
GUID&InterfaceClassG
&&&&&&&&&HDEVNOTIFY&*hDevN
//在理它们的定义已经包含在windows.h中,包括RegisterDeviceNotification
//但是编译的时候,却说
error&C2061:&syntax&error&:&identifier&'HDEVNOTIFY'
error&C2065:&'hDevNotify'&:&undeclared&identifier
error&C2065:&'RegisterDeviceNotification'&:&undeclared&identifier
等一系列错误
应该如何解决呢?这是什么原因造成的??谢谢了#include&"Winuser.h"不是在#include&"Windows.h"中已经包含了Winuser.h"了吗?这与你的操作系统有关,你可以看看Winuser.h的2643行如下
#if(WINVER&&=&0x0500)
typedef&&PVOID&&&&&&&&&&&HDEVNOTIFY;
typedef&&HDEVNOTIFY&&&&&*PHDEVNOTIFY;
#define&DEVICE_NOTIFY_WINDOW_HANDLE&&&&&0x
WINUSERAPI
HDEVNOTIFY
RegisterDeviceNotificationA(
&&&&IN&HANDLE&hRecipient,
&&&&IN&LPVOID&NotificationFilter,
&&&&IN&DWORD&Flags
WINUSERAPI
HDEVNOTIFY
RegisterDeviceNotificationW(
&&&&IN&HANDLE&hRecipient,
&&&&IN&LPVOID&NotificationFilter,
&&&&IN&DWORD&Flags
#ifdef&UNICODE
#define&RegisterDeviceNotification&&RegisterDeviceNotificationW
#define&RegisterDeviceNotification&&RegisterDeviceNotificationA
#endif&//&!UNICODE
WINUSERAPI
UnregisterDeviceNotification(
&&&&IN&HDEVNOTIFY&Handle
#endif&/*&WINVER&&=&0x0500&*/typedef&&PVOID&&&&&&&&&&&HDEVNOTIFY;
typedef&&HDEVNOTIFY&&&&&*PHDEVNOTIFY;
//在??之前加入上面的..估?是?
class&CMainFrame&:&public&CFrameWnd
{#if(WINVER&&=&0x0500)&就是??其作用请注意#if(WINVER&&=&0x0500)此处,而在windows.h有如下定义
#ifndef&WINVER
#define&WINVER&0x0400
#if&defined(_WIN32_WINNT)&&&&(WINVER&&&0x0400)&&&&(_WIN32_WINNT&&&0x0400)
#error&WINVER&setting&conflicts&with&_WIN32_WINNT&setting
即你未定义WINVER,则系统定义为0x0400
在StdAfx.h添加
#define&WINVER&0x0500
#if&_MSC_VER&&&1000
#pragma&once
#endif&//&_MSC_VER&&&1000
#define&VC_EXTRALEAN
//&Exclude&rarely-used&stuff&from&Windows&headers
#define&WINVER&0x0500
即可upWindows&headers
这句话加在Windows&headers是什么意思是上面注释,你只要在前面加上#define&WINVER&0x0500
就行我现在是在Win2000&pro下用VC
造成版本的原因是不是,我没装VS6的补丁??编译通过,不过它的编译信息可以看看,这是编译的信息:
NOTE:&WINVER&has&been&defined&as&0x0500&or&greater&which&enables
Windows&NT&5.0&and&Windows&98&features.&When&these&headers&were&released,
Windows&NT&5.0&beta&1&and&Windows&98&beta&2.1&were&the¤t&versions.
For&this&release&when&WINVER&is&defined&as&0x0500&or&greater,&you&can&only
build&beta&or&test&applications.&&To&build&a&retail&application,
set&WINVER&to&0x0400&or&visit&/msdn/sdk
to&see&if&retail&Windows&NT&5.0&or&Windows&98&headers&are&available.
See&the&SDK&release¬es&for&more&information.
Compiling...
MainFrm.cpp
test2Doc.cpp
test2View.cpp
Generating&Code...
Linking...
//下面这句话是什么意思啊??
LINK&:&LNK4073:&cannot&create&map&for&.ILK&&linking&nonincrementally不是你可以在vc代码中看到如果你没有定义winver,系统会默认为0x0400
在看他的提示
#if(WINVER&&=&0x0500)
#pragma&message&("")
#pragma&message&("NOTE:&WINVER&has&been&defined&as&0x0500&or&greater&which&enables")
#pragma&message&("Windows&NT&5.0&and&Windows&98&features.&When&these&headers&were&released,")
#pragma&message&("Windows&NT&5.0&beta&1&and&Windows&98&beta&2.1&were&the¤t&versions.")
#pragma&message&("")
#pragma&message&("For&this&release&when&WINVER&is&defined&as&0x0500&or&greater,&you&can&only")
#pragma&message&("build&beta&or&test&applications.&&To&build&a&retail&application,")
#pragma&message&("set&WINVER&to&0x0400&or&visit&/msdn/sdk")
#pragma&message&("to&see&if&retail&Windows&NT&5.0&or&Windows&98&headers&are&available.")
#pragma&message&("")
#pragma&message&("See&the&SDK&release¬es&for&more&information.")
#pragma&message&("")
这说明一切是不是你的硬盘不足
rebuild&all#pragma&message&("For&this&release&when&WINVER&is&defined&as&0x0500&or&greater,&you&can&only")
#pragma&message&("build&beta&or&test&applications.&&To&build&a&retail&application,")
这段话是来吓唬人的吧??!!
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:编辑:www.fx114.net
本篇文章主要介绍了"usb的问题
40hyc29]",主要涉及到usb的问题
40hyc29]方面的内容,对于usb的问题
40hyc29]感兴趣的同学可以参考一下。
我做一个界面,要求用usb接口进行通信,到查找设备接口时有如下代码
SP_DEVICE_INTERFACE_DATA&
strdata.cbsize&=&sizeof(strdata);
BOOL&result&=&SetDiEnumDeviceInterfaces(hDevInfo,&null,&&guidhid,&0,&&strdata);
插入一个u盘测试
运行时得到的result总是0;这是什么原因;
哪位高手能帮我分析一下1&&hDevInfo&从&SetupDiGetClassDevs&获得。
&&&&DIGCF_PRESENT&|&DIGCF_INTERFACEDEVICE&参数要对应。
2&&strdata&&从&SetupDiEnumDeviceInterfaces。
&&&&guid&要适用。引用&1&楼&jslisong&的回复:1&hDevInfo&从&SetupDiGetClassDevs&获得。
&&DIGCF_PRESENT&|&DIGCF_INTERFACEDEVICE&参数要对应。
2&strdata&从&SetupDiEnumDeviceInterfaces。
&&guid&要适用。
hDevInfo&已经从&SetupDiGetClassDevs&获得
DIGCF_PRESENT&|&DIGCF_INTERFACEDEVICE&参数要对应。
这个参数对应是什么意思
guid&要适用
这个guid是由接口函数获得的,
这个要适用是怎么个适用法
我是第一次编写usb程序,所以不是很懂reslut&总是0
用getlasterror得到是259
这是什么原因啊为什么到处发啊?我在另一贴回过了.引用&1&楼&jslisong&的回复:1&hDevInfo&从&SetupDiGetClassDevs&获得。
&&DIGCF_PRESENT&|&DIGCF_INTERFACEDEVICE&参数要对应。
2&strdata&从&SetupDiEnumDeviceInterfaces。
&&guid&要适用。
&&guid&要适用。
HID的guid是
GUID&InterfaceClassGuid&=&{0x4d1e55b2,&0xf16f,&0x11cf,&0x88,&0xcb,&0x00,&0x11,&0x11,&0x00,&0x00,&0x30};&因为等了好久都没人回,发现硬件与系统中有很多相似的所以也发了一个
现在我的result没问题,用createfile后返回的是0xfffffffff,请问是可能是那个地方出错了检查一下CreateFile的参数吧。你返回了INVALID_HANDLE_VALUE,用GetLastError看看error&code是什么。
&&&&&&&&&&&&m_hRead&=&CreateFile(DetailedInterfaceDataStructure-&DevicePath,&GENERIC_READ,&FILE_SHARE_READ&|&FILE_SHARE_WRITE,&NULL,&OPEN_EXISTING,&0,&0);
&&&&&&&&&&&&if(m_hRead&==&INVALID_HANDLE_VALUE)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&dwErrorStatus&=&GetLastError();
&&&&&&&&&&&&&&&&CloseHandle(m_hWrite);
&&&&&&&&&&&&&&&&SetupDiDestroyDeviceInfoList(DeviceInfoTable);&&&&//Clean&up&the&old&structure&we&no&longer&need.
&&&&&&&&&&&&&&&&free(szPropertyANSIString);
&&&&&&&&&&&&&&&&szPropertyANSIString&=&NULL;
&&&&&&&&&&&&&&&&return&FALSE;
&&&&&&&&&&&&}用getlasterror得到的是5打印下DetailedInterfaceDataStructure-&DevicePath,用Winobj等工具看看.eyey1
你能将你的qq给我吗引用&10&楼&hyc29&的回复:eyey1
你能将你的qq给我吗
实在不好意思,我公司不能上QQ.干脆我把我的代码全贴给你参考吧.
#pragma&once
#include&&setupapi.h&
class&CDevice
~CDevice(void);
/* static&CDevice&CreateDeviceObj()
static&CDevice&DeviceO
return&DeviceO
CDevice(void);
BOOL&IsConnected(void);
int&Write(int&nLen,&void&*&pBuff);
int&Read(int&*&pLen,&void&*&pBuff);
BOOL&Connect(void);
BOOL&DisConnect(void);
HWND&CreateHideWnd(void);
HANDLE&m_hW
HANDLE&m_hR
BOOL&DestroyHideWindow(void);
// static&LRESULT&CALLBACK&MainWndProc(HWND&hWnd,&UINT&uMsg,&WPARAM&wParam,&LPARAM&lParam)&;
};Device.cpp
#include&"StdAfx.h"
#include&"Device.h"
#include&&Dbt.h&
#include&&atlwin.h&
#define&MY_DEVICE_ID&&"Vid_04a8&Pid_009f"
GUID&InterfaceClassGuid&=&{0x4d1e55b2,&0xf16f,&0x11cf,&0x88,&0xcb,&0x00,&0x11,&0x11,&0x00,&0x00,&0x30};&
CDevice::CDevice(void)
:&m_bConnected(FALSE)
m_hWrite&=&NULL;
m_hRead&=&NULL;
m_bConnected&=&FALSE;
m_hWnd&=&NULL;
CreateHideWnd();
Connect();
CDevice::~CDevice(void)
DisConnect();
DestroyHideWindow();
m_hWrite&=&NULL;
m_hRead&=&NULL;
m_bConnected&=&FALSE;
m_hWnd&=&NULL;
BOOL&CDevice::IsConnected(void)
return&m_bC
int&CDevice::Write(int&nLen,&void&*&pBuff)
if(m_bConnected)
DWORD&dwBytesWritten&=&0;
if(WriteFile(m_hWrite,&pBuff,&nLen,&&dwBytesWritten,&0))
return&TRUE;
return&FALSE;
return&FALSE;
int&CDevice::Read(int&*&pLen,&void&*&pBuff)
if(m_bConnected)
if(ReadFile(m_hRead,&pBuff,&*&pLen,&(LPDWORD)pLen,&0))
return&TRUE;
return&FALSE;
return&FALSE;
LRESULT&CALLBACK&MainWndProc(HWND&hWnd,&UINT&uMsg,&WPARAM&wParam,&LPARAM&lParam)&
static&CDevice&*&pDevice&=&NULL;
LPCREATESTRUCT&lPCreate&=&NULL;
ATLTRACE("\nMainWndProc\n");
switch&(uMsg)&
case&WM_DEVICECHANGE:
switch(LOWORD(wParam))
case&DBT_DEVICEARRIVAL:
ATLTRACE("\nDBT_DEVICEARRIVAL\n");
pDevice-&Connect();
case&DBT_DEVICEREMOVECOMPLETE:
ATLTRACE("\nDBT_DEVICEREMOVECOMPLETE\n");
pDevice-&DisConnect();
case&DBT_DEVNODES_CHANGED:
ATLTRACE("\nDBT_DEVNODES_CHANGED\n");
case&DBT_DEVICEREMOVEPENDING:
ATLTRACE("\nDBT_DEVICEREMOVEPENDING\n");
case&DBT_CONFIGCHANGED:
ATLTRACE("\nDBT_CONFIGCHANGED\n");
ATLTRACE("\ndefault\n");
case&WM_CREATE:&
lPCreate&=&(LPCREATESTRUCT)lP
if(lParam&!=&0)
pDevice&=&(CDevice&*)lPCreate-&lpCreateP
case&WM_DESTROY:&
PostQuitMessage(WM_QUIT);&
return&DefWindowProc(hWnd,&uMsg,&wParam,&lParam);
BOOL&DoRegisterDeviceInterface(&
&&&HWND&hwnd,
&&&&GUID&InterfaceClassGuid,&
&&&&HDEVNOTIFY&*hDevNotify&
Routine&Description:
&&&&Registers&for¬ification&of&changes&in&the&device&interfaces&for
&&&&the&specified&interface&class&GUID.&
Parameters:
&&&&InterfaceClassGuid&-&The&interface&class&GUID&for&the&device&
&&&&&&&&interfaces.&
&&&&hDevNotify&-&Receives&the&device¬ification&handle.&On&failure,&
&&&&&&&&this&value&is&NULL.
Return&Value:
&&&&If&the&function&succeeds,&the&return&value&is&TRUE.
&&&&If&the&function&fails,&the&return&value&is&FALSE.
&&&&DEV_BROADCAST_DEVICEINTERFACE&NotificationF
&//&&&char&szMsg[80];
&&&&ZeroMemory(&&NotificationFilter,&sizeof(NotificationFilter)&);
&&&&NotificationFilter.dbcc_size&=&
&&&&&&&&sizeof(DEV_BROADCAST_DEVICEINTERFACE);
&&&&NotificationFilter.dbcc_devicetype&=&DBT_DEVTYP_DEVICEINTERFACE;
&&&&NotificationFilter.dbcc_classguid&=&InterfaceClassG
&&&&*hDevNotify&=&RegisterDeviceNotification(&hwnd,&
&&&&&&&&&NotificationFilter,
&&&&&&&&DEVICE_NOTIFY_WINDOW_HANDLE
&&&&if(!*hDevNotify)&
&&&&&&&&return&FALSE;
&&&&return&TRUE;
HWND&CDevice::CreateHideWnd(void)
HWND&&&&&&
WNDCLASSEX&&&&&
memset(&wcex,0,sizeof(WNDCLASSEX));
HINSTANCE&hInstance&=&(HINSTANCE)GetModuleHandle(0);
wcex.cbSize&&&&&&&&&&=&&&sizeof(WNDCLASSEX);&&&&&
wcex.style&&&&&&&&&&&=&&&0;&&&
wcex.lpfnWndProc&&&&&=&&&(WNDPROC)MainWndP&&&
wcex.cbClsExtra&&&&&&=&&&0;&&&
wcex.cbWndExtra&&&&&&=&&&0;&&&
wcex.hInstance&&&&&&&=&&&hI&&&
wcex.hIcon&&&&&&&&&&&=&&&LoadIcon(0,IDI_APPLICATION);&&&
wcex.hCursor&&&&&&&&&=&&&LoadCursor(0,IDC_ARROW);&&&
wcex.hbrBackground&&&=&&&(HBRUSH)(COLOR_WINDOW+1);&&&
wcex.lpszMenuName&&&&=&&&0;&&&
wcex.lpszClassName&&&=&&&L"HideWindow";&&&
wcex.hIconSm&&&&&&&&&=&&&LoadIcon(0,IDI_APPLICATION);&&&
if&&&(!RegisterClassEx(&wcex))&&&
ATLTRACE("fail&&&to&&®ister&&&window&&&class!\n");&&&
return&&&0;&&&
hwnd&=&CreateWindow(L"HideWindow",&&&
WS_OVERLAPPEDWINDOW&,
CW_USEDEFAULT,&&&
CW_USEDEFAULT,&&&
NULL,&&&&&&&&&
0,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
hInstance,&&&
(LPVOID)this
if(!hwnd)&&&
DWORD&dwErr&=&::GetLastError();
ATLTRACE("fail&&&to&&&create&&&window!\n");&&&
return&&&0;&&&
// &&&&ShowWindow(hwnd,&1);&
//&&&&UpdateWindow(hwnd);&
DEV_BROADCAST_DEVICEINTERFACE&MyDeviceBroadcastH//&=&new&DEV_BROADCAST_HDR;
&&&&ZeroMemory(&&MyDeviceBroadcastHeader,&sizeof(DEV_BROADCAST_DEVICEINTERFACE));
MyDeviceBroadcastHeader.dbcc_devicetype&=&DBT_DEVTYP_DEVICEINTERFACE;
MyDeviceBroadcastHeader.dbcc_size&=&sizeof(DEV_BROADCAST_DEVICEINTERFACE);
MyDeviceBroadcastHeader.dbcc_reserved&=&0; //Reserved&says¬&to&use...
MyDeviceBroadcastHeader.dbcc_classguid&=&InterfaceClassG
// RegisterDeviceNotification(hwnd,&&MyDeviceBroadcastHeader,&DEVICE_NOTIFY_WINDOW_HANDLE);
HDEVNOTIFY&hDevN
if(!DoRegisterDeviceInterface(m_hWnd,InterfaceClassGuid,&hDevNotify))
DWORD&dwErr&=&::GetLastError();
ATLTRACE("fail&to&RegisterDeviceInterface!\n");&&&
return&&&0;&&&
}继续Device.cpp
BOOL&CDevice::Connect(void)
HDEVINFO&DeviceInfoTable&=&INVALID_HANDLE_VALUE;
SP_DEVICE_INTERFACE_DATA&devInfoD
BOOL&bResult&=&FALSE;
SP_DEVINFO_DATA&DevInfoD
DWORD&dwInterfaceIndex&=&0;
DWORD&dwRegType&=&0;
DWORD&dwRegSize&=&0;
DWORD&dwStructureSize&=&0;
DWORD&dwErrorStatus&=&NULL;
PBYTE&pPropertyValueBuffer&=&NULL;
char&*&szPropertyANSIString&=&NULL;
char&szPID_VID[]&=&MY_DEVICE_ID;
DeviceInfoTable&=&SetupDiGetClassDevs(&InterfaceClassGuid,NULL,NULL,DIGCF_PRESENT&|&DIGCF_DEVICEINTERFACE);
devInfoData.cbSize&=&sizeof(devInfoData);
while(true)
bResult&=&SetupDiEnumDeviceInterfaces(DeviceInfoTable,NULL,&InterfaceClassGuid,dwInterfaceIndex,&devInfoData);
if(bResult)
dwErrorStatus&=&GetLastError();
if(ERROR_NO_MORE_ITEMS&==&dwErrorStatus) //Did&we&reach&the&end&of&the&list&of&matching&devices&in&the&DeviceInfoTable?
{ //Cound¬&find&the&device.&&Must¬&have&been&attached.
SetupDiDestroyDeviceInfoList(DeviceInfoTable); //Clean&up&the&old&structure&we&no&longer&need.
return&FALSE;
SetupDiDestroyDeviceInfoList(DeviceInfoTable);
return&FALSE;
DevInfoData.cbSize&=&sizeof(SP_DEVINFO_DATA);
SetupDiEnumDeviceInfo(DeviceInfoTable,&dwInterfaceIndex,&&DevInfoData);
//First&query&for&the&size&of&the&hardware&ID,&so&we&can&know&how&big&a&buffer&to&allocate&for&the&data.
SetupDiGetDeviceRegistryProperty(DeviceInfoTable,&&DevInfoData,&SPDRP_HARDWAREID,&&dwRegType,&NULL,&0,&&dwRegSize);
pPropertyValueBuffer&=&(BYTE&*)&malloc(dwRegSize);
if(pPropertyValueBuffer&==&NULL) //if&null,&error,&couldn't&allocate&enough&memory
{ //Can't&really&recover&from&this&situation,&just&exit&instead.
SetupDiDestroyDeviceInfoList(DeviceInfoTable); //Clean&up&the&old&structure&we&no&longer&need.
return&FALSE;
SetupDiGetDeviceRegistryProperty(DeviceInfoTable,&&DevInfoData,&SPDRP_HARDWAREID,&&dwRegType,&pPropertyValueBuffer,&dwRegSize,&NULL);
szPropertyANSIString&=&(char&*)malloc(dwRegSize);&&&&
if(szPropertyANSIString&==&NULL) //if&null,&error,&couldn't&allocate&enough&memory
{ //Can't&really&recover&from&this&situation,&just&exit&instead.
free(pPropertyValueBuffer);
SetupDiDestroyDeviceInfoList(DeviceInfoTable); //Clean&up&the&old&structure&we&no&longer&need.
return&FALSE;
#ifdef&UNICODE
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,(LPCWSTR)pPropertyValueBuffer,-1,(LPSTR)szPropertyANSIString,dwRegSize,NULL,NULL);
strcpy_s((char&*)szPropertyANSIString,MAX_PATH,(char&*)pPropertyValueBuffer);
free(pPropertyValueBuffer);
pPropertyValueBuffer&=&NULL;
_strlwr_s((char&*)szPropertyANSIString,dwRegSize);
_strlwr_s(szPID_VID,sizeof(szPID_VID));
if(strstr(szPropertyANSIString,szPID_VID)&!=&NULL)//Our&VID/PID
free(pPropertyValueBuffer);
pPropertyValueBuffer&=&NULL;
PSP_DEVICE_INTERFACE_DETAIL_DATA&DetailedInterfaceDataStructure&=&new&SP_DEVICE_INTERFACE_DETAIL_DATA; //Global
DetailedInterfaceDataStructure-&cbSize&=&sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
//First&call&populates&"StructureSize"&with&the&correct&value
SetupDiGetDeviceInterfaceDetail(DeviceInfoTable,&&devInfoData,&NULL,&NULL,&&dwStructureSize,&NULL);
DetailedInterfaceDataStructure&=&(PSP_DEVICE_INTERFACE_DETAIL_DATA)(malloc(dwStructureSize));
//Allocate&enough&memory
if(DetailedInterfaceDataStructure&==&NULL) //if&null,&error,&couldn't&allocate&enough&memory
{ //Can't&really&recover&from&this&situation,&just&exit&instead.
dwErrorStatus&=&GetLastError();
SetupDiDestroyDeviceInfoList(DeviceInfoTable); //Clean&up&the&old&structure&we&no&longer&need.
free(szPropertyANSIString);
szPropertyANSIString&=&NULL;
return&FALSE;
DetailedInterfaceDataStructure-&cbSize&=&sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
//Now&call&SetupDiGetDeviceInterfaceDetail()&a&second&time&to&receive&the&goods.&&
SetupDiGetDeviceInterfaceDetail(DeviceInfoTable,&&devInfoData,&DetailedInterfaceDataStructure,&dwStructureSize,&NULL,&NULL);&
m_hWrite&=&CreateFile(DetailedInterfaceDataStructure-&DevicePath,&GENERIC_WRITE,&FILE_SHARE_READ&|&FILE_SHARE_WRITE,&NULL,&OPEN_EXISTING,&0,&0);
if(m_hWrite&==&INVALID_HANDLE_VALUE)
dwErrorStatus&=&GetLastError();
SetupDiDestroyDeviceInfoList(DeviceInfoTable); //Clean&up&the&old&structure&we&no&longer&need.
free(szPropertyANSIString);
szPropertyANSIString&=&NULL;
return&FALSE;
m_hRead&=&CreateFile(DetailedInterfaceDataStructure-&DevicePath,&GENERIC_READ,&FILE_SHARE_READ&|&FILE_SHARE_WRITE,&NULL,&OPEN_EXISTING,&0,&0);
if(m_hRead&==&INVALID_HANDLE_VALUE)
dwErrorStatus&=&GetLastError();
CloseHandle(m_hWrite);
SetupDiDestroyDeviceInfoList(DeviceInfoTable); //Clean&up&the&old&structure&we&no&longer&need.
free(szPropertyANSIString);
szPropertyANSIString&=&NULL;
return&FALSE;
//We&now&have&the&proper&device&path,&and&we&can&finally&open&a&device&handle&to&the&device.
//WinUSB&requires&the&device&handle&to&be&opened&with&the&FILE_FLAG_OVERLAPPED&attribute.
SetupDiDestroyDeviceInfoList(DeviceInfoTable); //Clean&up&the&old&structure&we&no&longer&need.
free(szPropertyANSIString);
szPropertyANSIString&=&NULL;
m_bConnected&=&TRUE;
ATLTRACE("Devic&connect&OK\n");
return&TRUE;
free(szPropertyANSIString);
szPropertyANSIString&=&NULL;
dwInterfaceIndex++;
if(dwInterfaceIndex&&)
return&FALSE;
BOOL&CDevice::DisConnect(void)
if(m_hWrite)
CloseHandle(m_hWrite);
m_hWrite&=&NULL;
if(m_hRead)
CloseHandle(m_hRead);
m_hRead&=&NULL;
m_bConnected&=&FALSE;
ATLTRACE("Devic&disconnect\n");
BOOL&CDevice::DestroyHideWindow(void)
return&DestroyWindow(m_hWnd);
}没下文了?
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:打印机端口怎么检测
编辑:www.fx114.net
本篇文章主要介绍了"打印机端口怎么检测
100wewaa]",主要涉及到打印机端口怎么检测
100wewaa]方面的内容,对于打印机端口怎么检测
100wewaa]感兴趣的同学可以参考一下。
我做了一个打印控件,主要是打印那种POS小票的,由于这种小票机用的端口基本都是并口,但是现在很多电脑没有并口,所以一般都是***一个usb口驱动,虚拟出一个串口或并口,这种虚拟的端口只有插上线才会出现。
现在的问题是:我怎么知道这个虚拟的端口是什么口?COM3?COM4?不能让用户去选择,用户想直接插上打印机就用.枚举,不知道行的通行不通。比如打开com1如果接有鼠标的话就会收到字符“M”不知道打印机会不会也有个设备标识,就是开机的时候告诉系统他是什么设备的代码,如果有就这样判断就ok了你用??串口,usb?串口的?
提醒你一下:
串口?&=10的?,打?串口?注意
Example&for&C/C++/C#:&&
hPort&=&CreateFile("\\\\.\\COM10",&...);&&
Example&for&VB:&&
hPort&=&CreateFile("\\.\COM10",&...);&&
Example&for&Delphi:&&
hPort&:=&CreateFile('\\.\COM10',&...);打印机协议里面应该会有&握手形式的&指令吧,,&一般设备都有,发送相应指令过去,如果能返回,这个口就是能用的。
不知道你的打印机有没有这样的功能。。
比方说前阵用到&S&-200&ppi的协议&它有这么一个功能
向串口发送&10&02&00&49&4B&16
如果该串口上设备准备好了&它返回&:10&02&5C&5E&16&&我就靠这个认为设置在此串口上。。主要看什么打印机,各个厂家的也不尽相同
我用的热敏打印机就没有返回的
你可以要求厂家给你做个双工的,或者选择一个带返回的状态的打印机这个,可以监视的,有串口&USB口&监视软件,,看看来回传的是啥玩意,,一会就总结出一个套路来了。学习ingzhouzhangkui
感谢提供这么多信息,事实上选择制定的打印机我也想过,可惜领导不同意。
(zzbinfo)&
设备的代码怎么获取和处理?我用的POS2000,不知道怎么获取该设备的代码?
监控是怎么弄,另外***一个软件吗?
谢谢各位!如果你是&串口那是很容易监视&进出的数据&免费的软件就能办得到&&Free&Serial&Port&Monitor
可以找找相应产品的试用或者&XX版,,这个要分析协议具体的各项还要以你的打印机的型号
而且你在楼上所说打印机不能定制,,怕是这种做法也不大容易实现。。。//---------------------------------------------------------------------------
#include&&vcl.h&
#pragma&hdrstop
#include&&dbt.h&
#include&&Initguid.h&
#include&&setupapi.h&
#include&&winioctl.h&
#define&INITGUID
DEFINE_GUID(USB_DEVICES,0xA5DCBF10,0xD2,0x90,0x1F,0x00,0xC0,0x4F,0xB9,0x51,0xED);
#include&"Unit1.h"
//---------------------------------------------------------------------------
#pragma&package(smart_init)
#pragma&resource&"*.dfm"
TForm1&*Form1;
HDEVNOTIFY&hDevN
bool&&RegisterDev();
void&&UnRegisterDev();
//---------------------------------------------------------------------------
__fastcall&TForm1::TForm1(TComponent*&Owner)
&&:&TForm(Owner)
bool&RegisterDev()
&&DEV_BROADCAST_DEVICEINTERFACE&NotificationF
&&ZeroMemory(&&NotificationFilter,&sizeof(NotificationFilter));
&&NotificationFilter.dbcc_size&=&sizeof(NotificationFilter);
&&NotificationFilter.dbcc_devicetype=DBT_DEVTYP_DEVICEINTERFACE;
&&NotificationFilter.dbcc_classguid=&USB_DEVICES;
&&NotificationFilter.dbcc_reserved=0;
&&//paticular&Device&with&Window_Handle
&&hDevNotify=RegisterDeviceNotification(Form1-&Handle,&NotificationFilter,&DEVICE_NOTIFY_WINDOW_HANDLE);
&&if(hDevNotify==NULL)&return&
void&&UnRegisterDev()
&&if(hDevNotify!=NULL)UnregisterDeviceNotification(hDevNotify);
//---------------------------------------------------------------------------
void&&&__fastcall&&&TForm1::WndProc(TMessage&&&&Message)
&&if(Message.Msg&==&WM_DEVICECHANGE){
&&&&DEV_BROADCAST_HDR&*lpDevHdr=&(DEV_BROADCAST_HDR*)Message.LP
&&&&switch(Message.WParam){
&&&&&&case&DBT_DEVICEARRIVAL:
&&&&&&&&if(lpDevHdr-&dbch_devicetype&==&DBT_DEVTYP_DEVICEINTERFACE){
&&&&&&&&&&//USB设备插入
&&&&&&&&&&DEV_BROADCAST_DEVICEINTERFACE&*lpb&=(DEV_BROADCAST_DEVICEINTERFACE&*)Message.LP
&&&&&&&&&&//lpb-&dbcc_
&&&&&&&&&&//lpb-&dbcc_name,
&&&&&&&&&&//得到类似\\\\?\\USB#Vid_xxxx&Pid_xxxx#........#{a5dcbf10..}&&,
&&&&&&&&&&//对应注册表位置&HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_xxxx&Pid_xxxx&,看看其信息
&&&&&&&&&&//也可以看看HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\下有没有该设备驱动的一些信息,根据#Vid_xxxx&Pid_xxxx#........#{a5dcbf10..}
&&&&&&&&&&//应该可以得到你想要的端口
&&&&&&&&&&//找注册表是其中的一个方法,也可以根据lpb-&dbcc_classguid来枚举找
&&&&&&&&&&}
&&&&&&case&DBT_DEVICEREMOVECOMPLETE:
&&&&&&&&if(lpDevHdr-&dbch_devicetype&==&DBT_DEVTYP_DEVICEINTERFACE){
&&&&&&&&&//USB设备移除
&&&&&&&&&&}
&&TForm::WndProc(Message);
void&__fastcall&TForm1::FormShow(TObject&*Sender)
RegisterDev();&&
//---------------------------------------------------------------------------
void&__fastcall&TForm1::FormClose(TObject&*Sender,&TCloseAction&&Action)
UnRegisterDev();
//---------------------------------------------------------------------------监视usb通讯数据,可以用软件:Bus&hound多谢jiangshx
我找到了,"PortName"="COM3"
VID_0483&PID_5740这个在不同的电脑上是不是一样的?
Windows&Registry&Editor&Version&5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_0483&PID_5740\6\Device&Parameters]
"PortName"="COM3"
"PollingPeriod"=dword:
"SymbolicName"="\\??\\USB#VID_0483&PID_5740#6#{a5dcbf10--901f-00c04fb951ed}"在不同的电脑上是一样的。
VID和PID分别是指&Vendor&ID(生产厂商ID)&和&Product&ID(产品ID)。
这两个值取决于设备,准确说是设备上的usb控制芯片,不同的usb控制芯片,这两个值就不同。
同一类型usb设备,这两个值是完全相同的。明白了,多谢!
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接: