您的位置:首页 > 产品设计 > UI/UE

使用RegSetValueEx时要注意的一点问题

2009-04-15 19:19 253 查看
今天在使用RegSetValueEx时发现一个问题:

RegSetValueEx(hKey, TEXT("test"), 0, REG_SZ, (LPBYTE)TEXT("test.dll"), 256);

向注册表的某位置写了一个test,键值为test.dll

程序运行时,按理说会自动去加载我的test.dll。(因为我手动去修改机器上的注册表,添加此注册表项时,确实是能让系统加载test.dll了)。但是结果却是通过程序向注册表去写时,注册表确实写上了,可是系统没有加载我的dll。

原因:

256!!!

把程序改成:

TCHAR szTest[32];

wcsncpy(szTest, TEXT("test.dll"), 32);

int iLen = wcslen(szTest);

RegSetValueEx(hKey, TEXT("test"), 0, REG_SZ, (LPBYTE)szTest, sizeof(TCHAR)*iLen );

就可以了。

我们看一下RegSetValueEx中的参数:

LONG RegSetValueEx( 
HKEY hKey, 
LPCWSTR lpValueName, 
DWORD Reserved, 
DWORD dwType, 
const BYTE* lpData, 
DWORD cbData
);

cbData不能太大,否则很可能把lpData指向的内容之外的其他字符也写入注册表中。导致错误发生。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: