目前正在使用VC++打開/讀取圖像。使用openCV VC++讀取文件I/O
我在互聯網上遇到的一些例子使用Windows.h I/O例程,如ReadFile ...但似乎有聲明中的不一致。 (不是說我對Windows有挑戰性......可能是因爲我的理解太少)
這就是我所得到的。
//So i have this function to load file
BYTE* LoadFile (int* width, int* height, long* size, LPCWSTR bmpfile)
{
BITMAPFILEHEADER bmpheader;
BITMAPINFOHEADER bmpinfo;
DWORD bytesread = 0;
HANDLE file = CreateFile (bmpfile , GENERIC_READ, FILE_SHARE_READ,NULL,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (NULL == file)
return NULL;
if (ReadFile (file, &bmpheader, sizeof (BITMAPFILEHEADER),&bytesread,
NULL) == false)
{
CloseHandle (file);
return NULL;
}
.
.
.
return appropriate value;
}
現在ReadFile的API函數聲明爲在WINBASE.H
WINBASEAPI BOOL WINAPI ReadFile(
_In_ HANDLE hFile,
_Out_ LPVOID lpBuffer,
_In_ DWORD nNumberOfBytesToRead,
_Out_opt_ LPDWORD lpNumberOfBytesRead,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
而且在MSDN的例子如下... 他們這樣調用這個函數。
ReadFile(hFile, chBuffer, BUFSIZE, &dwBytesRead, NULL)
哪一個需要「bytesRead」是某種輸出參數。所以它給了我讀取的字節數。
但在我的代碼..它給錯誤信息。 'ReadFile':無法將參數4從'LPDWORD *'轉換爲'LPDWORD'
所以我只是初始化bytesRead爲0並通過值傳遞(這是錯誤的,但只是爲了檢查它是否工作)。
則給出了這樣的例外
Unhandled exception at 0x774406ae in ImProc.exe: 0xC0000005: Access violation
writing location 0x00000000.
請建議。
請告訴我是否錯過了任何代碼......包括在形成問題本身時。
謝謝。
你確定你已經正確地複製了'bytesread'的聲明嗎?當你在引用的代碼中是DWORD(這是正確的)時,錯誤使它看起來像是實際聲明爲'LPDWORD'('DWORD *')。此外,'NULL'不是'CreateFile'在失敗時返回的內容。你爲什麼在這裏使用Windows API? ''和''都使用起來更簡單並且便於攜帶。 –
嗨,詹姆斯,呀宣言是錯誤的...它應該是LPDWORD bytesRead = 0; 錯字 上述錯誤顯示正確的聲明。 我會嘗試iostream功能以及...我想你是指fread()和其他功能....但仍然可以檢查我使用的Windows API中的任何故障。 – Haswell