例如要讀出某一個String:
CReg regDaemon;
regDaemon.OpenOrCreateRegKey(HKEY_LOCAL_MACHINE, RK_TEST_KEY);
WCHAR * wchRegKeyString = (WCHAR * ) regDaemon(HKEY_LOCAL_MACHINE, RK_BASE_TEST, 0);
然而當你要用這個方法讀出存在Key中的String,然後放進 CreateFile 中去進行檔案的操作時。
CreateFile會一直說路徑錯誤。
例如:
HANDLE hFile = CreateFile(wchRegKeyString ,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
原因不明,但是有方法可以解決(找了好久才發現一定需要這樣子做)。因為reg key 傳回的只有一個字元陣列的指標。那就是必須在function中額外宣告一個字元陣列來暫存這些字元。因此你必須利用memcpy或是wcscpy_s先將字元拷貝到暫存的陣列:
WCHAR wStringBuffer[128] = {0};
wcscpy_s(wStringBuffer,sizeof(wStringBuffer)/sizeof(WCHAR),wchRegKeyString );
HANDLE hFile = CreateFile(wStringBuffer,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
真的是很機車的M$,很不乾脆的一個作法。害我浪費了許多時間try and error。(這才是這篇網誌的主要目的,上來幹橋一下M$)。
沒有留言:
張貼留言