请大家帮忙看一个编译错误,运行环境VS2005;
谢谢。//////////for(int i = 1; i <=32; i++)
//////////{
////////// if((dbv->dbcv_unitmask>>i) == 0x01)
////////// break;
//////////CString strText;
strText.Format("\\\\.\\%c:", i+0x41);
//////////m_hDevice[i] = CreateFile(strText, GENERIC_ALL,FILE_SHARE_WRITE, NULL, OPEN_EXISTING, //////////FILE_ATTRIBUTE_NORMAL,NULL); error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [8]' to 'const wchar_t *'
谢谢。//////////for(int i = 1; i <=32; i++)
//////////{
////////// if((dbv->dbcv_unitmask>>i) == 0x01)
////////// break;
//////////CString strText;
strText.Format("\\\\.\\%c:", i+0x41);
//////////m_hDevice[i] = CreateFile(strText, GENERIC_ALL,FILE_SHARE_WRITE, NULL, OPEN_EXISTING, //////////FILE_ATTRIBUTE_NORMAL,NULL); error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [8]' to 'const wchar_t *'
你用的UNICODE编码,引号前加L即可:
strText.Format(L"\\\\.\\%c:", i+0x41);
在什么时候会执行下面的函数(里面有执行操作的代码);
对回调函数不熟,请大家介绍下,谢谢LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // device-change event
LPARAM lParam // event-specific data
)
{
......
}
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // device-change event
LPARAM lParam // event-specific data
)
{
......
}
里面的代码?
要实现的功能是:正常情况下禁用优盘,有优盘插入就不允许读里面的资料;
特殊情况下再启用优盘USB口;
////////////////////////////////////////////////////////////////
// TestUSBDlg.h : 头文件
//
// 实现public:
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // device-change event
LPARAM lParam // event-specific data
);
////////////////////////////////////////////////////////////////
// stdafx.h : 标准系统包含文件的包含文件,
//
#include <Windows.h>
#include <Winbase.h>
#include <Winuser.h>
#include <Dbt.h>
#include <Winioctl.h>
////////////////////////////////////////////////////////////////
// TestUSBDlg.cpp : 实现文件
//
LRESULT CTestUSBDlg::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HANDLE m_hDevice[100]; if(uMsg == WM_DEVICECHANGE)
{
switch(wParam)
{
case DBT_DEVICEARRIVAL : //设备插入消息
DEV_BROADCAST_HDR *dbh;
dbh = (DEV_BROADCAST_HDR*)lParam; if(dbh->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
DEV_BROADCAST_VOLUME *dbv;
dbv = (DEV_BROADCAST_VOLUME*)lParam;
for(int i = 1; i <=32; i++)
{
if((dbv->dbcv_unitmask>>i) == 0x01)
break;
CString strText;
strText.Format(L"\\\\.\\%c:", i+0x41);
m_hDevice[i] = CreateFile(strText, GENERIC_ALL,FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); if(m_hDevice[i] != INVALID_HANDLE_VALUE)//USB
{
//如果CreateFile允许写成功判断为USB
DWORD dwRs;
DeviceIoControl(m_hDevice[i], FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &dwRs, NULL );
} else //CDROM
{
m_hDevice[i] = CreateFile(strText, GENERIC_READ, FILE_SHARE_READ , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(m_hDevice[i] != INVALID_HANDLE_VALUE)
{
DWORD dwRs;
DeviceIoControl(m_hDevice[i],FSCTL_LOCK_VOLUME,NULL, 0, NULL, 0, &dwRs, NULL);
}
} //End of else //CDROM
} //End of for(int i = 1; i <=32; i++)
} //End of if(dbh->dbch_devicetype == DBT_DEVTYP_VOLUME)
break;
} //End of switch(wParam)
} //End of if(uMsg == WM_DEVICECHANGE)
return CTestUSBDlg::WindowProc(hwnd, uMsg, wParam, lParam);
}
////////////////////////////////////////////////////////////////
void CTestUSBDlg::OnBnClickedBtntestusb()
{
// TODO: 在此添加控件通知处理程序代码
//CTestUSBDlg::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
}
////////////////////////////////////////////////////////////////