Win32 API 関数をラップするクラス メソッドがありますWriteFile()
。この API 関数は、LPCVOID
書き込むデータへの引数を取ります。しかし代わりに、C++ イテレータを渡したいと思います。どうすればいいのですか?
WriteFile()
機能:
BOOL WINAPI WriteFile(
_In_ HANDLE hFile,
_In_ LPCVOID lpBuffer,
_In_ DWORD nNumberOfBytesToWrite,
_Out_opt_ LPDWORD lpNumberOfBytesWritten,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
私の実装:
template <class Iter>
BinaryFile::RETURN_VALUES BinaryFile::Write(
Iter Begin,
Iter End,
DWORD & dwNumberOfBytesWritten /*= DUMMY_DWORD_REFERENCE*/)
{
if (m_nFileState != STATE_OPEN) return WRITE_FILE_NOT_OPEN;
BOOL bResult = WriteFile((HANDLE) m_hFile,
(LPCVOID) Begin,
(DWORD) sizeof(*Begin) * (End - Begin),
(LPDWORD) &dwNumberOfBytesWritten,
(LPOVERLAPPED) NULL);
m_dwLastError = ::GetLastError();
m_FilePointer += dwNumberOfBytesWritten;
if (bResult)
return WRITE_SUCCESSFUL;
else
return WRITE_FAILURE;
}
それを呼び出す試み:
TextFile::RETURN_VALUES TextFile::Write(std::vector<uint8_t> & String)
{
DWORD dwNumberOfBytesWritten;
BinaryFile::RETURN_VALUES WriteReturn = m_File.Write(
String.begin(),
String.end(),
dwNumberOfBytesWritten);
if (WriteReturn == BinaryFile::RETURN_VALUES::WRITE_SUCCESSFUL)
return WRITE_SUCCESSFUL;
else if (dwNumberOfBytesWritten < String.end() - String.begin())
return WRITE_NOT_ALL_WRITTEN;
else
return WRITE_FAILURE;
}
私が得るコンパイラ(VS2012)エラー:
BinaryFile.h
エラー C2440
'型キャスト': 'std::_Vector_iterator<_Myvec>' から 'LPCVOID' に変換できません