HANDLE/CFile Problem
-
Hi
{ // TODO: Add your control notification handler code here HANDLE hFile=CreateFile(_T("profile\test.txt"), FILE_ALL_ACCESS, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) AfxMessageBox(_T("konnts ned öffnen")); CFile profile(hFile); char lala[]="erste benutzung der write funktion"; profile.Write(lala, lstrlen(lala)); }Beim kompillieren entsteht folgender Fehler:
cannot conver Paramter 1 drom void* to intich hab den code aber relativ gleich aus der MSDN übernommen, was mach ich fals?

mfg
thenoob
-
Hallo,
du benötigst einen cast, außerdem ist ein Fehler in der Schreibweise der Datei (Escape-Sequenz beachten!), und noch außerdem solltest du nach der Messagebox nicht trotzdem ein CFile-Objekt erstellen:
{ // TODO: Add your control notification handler code here HANDLE hFile=CreateFile(_T("profile\\test.txt"), FILE_ALL_ACCESS, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) AfxMessageBox(_T("konnts ned öffnen")); else { CFile profile(reinterpret_cast<int>(hFile)); char lala[]="erste benutzung der write funktion"; profile.Write(lala, lstrlen(lala)); } }MfG
-
ok vielen Dank
aber was genau is dieser Cast?
und wieso brauch ich den?mfg
thenoob
-
der Konstruktor von CFile:
CFile( int hFile );
erwartet einen int, aber hFile ist ein "verkappter" void-Zeiger(void*), ein HANDLE:
HANDLE hFile=CreateFile(_T("profile\\test.txt"),
FILE_ALL_ACCESS, FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);C++ ist eine typsichere Sprache, und achtet genau darauf, ob die Typen "kompatibel" sind, wenn nicht, meckert der Compiler, also hier:
CFile profile(hFile);
Hier haben wir einen deutlichen Fall: ein Zeiger soll als int-Parameter behandelt werden, und deswegen muß man dies über einen cast explizit anfordern:
CFile profile(reinterpret_cast<int>(hFile));
MfG
-
Wenn du schon CFile verwendest kannst du es auch gleich zum öffnen/neuesfile verwenden.
CFile fFile; CFileException *feError = NULL; m_fFile.Open(szFile, CFile::modeCreate | CFile::modeReadWrite | CFile::shareDenyWrite ,feError))