sdk如何vc读写注册表表

您所在的位置: &
解析 Qt 4.7.0 SDK for Windows 安装后注册表中选项
解析 Qt 4.7.0 SDK for Windows 安装后注册表中选项
本文介绍的是Qt 4.7.0 SDK for Windows 安装后注册表中选项,先来看内容。
Qt 4.7.0 SDK for Windows 安装后注册表中选项是本文要介绍的内容,本人卸载Qt4.6.3后,安装Qt4.7.0 SDK for windows 到E盘,在Qt Creator里编程时鼠标放到#include &QMainWindow&等语句显示no file or directory,但编译能通过。
我在project mode里设置了环境变量后还是不行。怀疑是注册表的问题,但安装前没研究过Qt安装对注册表的影响,所以只得重装系统再安装Qt4.7.0,于是研究了一下SDK for Windows 安装后在注册表中的项。
在注册表中按&全字匹配&搜索&qt&或者&Nokia&的&项&。发现主要有以下四项比较重要。
一、HKEY_CURRENT_USER\Software\Nokia\QtCreator\PluginManager
二、HKEY_CURRENT_USER\Software\Trolltech
三、HKEY_USERS\S-1-5-21--3\Software\Trolltech
四、HKEY_USERS\S-1-5-21--3\Software\Nokia\QtCreator\PluginManager
如果您要卸载旧版本且安装新版本的Qt,则可以试试在安装新版本前删除以上四个项,这样能更好地确保Qt的正确安装。(小提示,注册表也有收藏夹功能 ,您可以手工地收藏以上四个项,方便下次找到)。
本文章原创于 :
小结:Qt 4.7.0 SDK for Windows 安装后注册表中选项的内容介绍完了,希望本文对你有所帮助。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&&&&&的更多文章
本书循序渐进地讲述了基于 iPhone SDK的应用程序开发的各个方面
既然强大的Android Studio来了,有什么理由不去用呢?
微信自引入语音短信功能用户量爆发之后,发展状况一直
Windows Phone开发创建吸引人、带给人快乐并保留用户
作为Android开发人员,在开发项目的过程中,我们往往
本书将全面介绍C#编程的所有知识,共分为5篇:第1篇是C#语言:介绍了C#语言的所有内容,从基础知识到面向对象的技术,应有尽有。
Windows Phone专家
Android开发专家
51CTO旗下网站COM在注册表中的相关键值及其意义 - 推酷
COM在注册表中的相关键值及其意义
当编写好一个COM并将其在系统中注册之后,这些注册表项到底位于Register中的什么位置,系统是如何通过这些注册表项在Runtime时候找到某个COM的,这些都是诊断COM相关的问题至关重要的信息。总的来说,系统是通过GUID来查找每个对象的,比如TypeLib,Interface和Class都有其相应的GUID(16bytes的字符串)。本文介绍了一个COM在注册后,系统注册表会被写入哪些键值,以及这些键值所代表的意义。
COM是一种基于独立于开发语言的编程模型。因此在描述COM功能和接口的时候采用了与编程语言无关的接口描述语言(IDL)来编写接口的抽象定义,该接口定义文件(*.IDL)经过Platform SDK自带的Microsoft IDL编译器编译之后将生成相应的头文件、类型库等。
如下是一个简单的类型库定义文件(OOPCOM.idl)
// OOPCOM.idl : IDL source for OOPCOM.dll
// This file will be processed by the MIDL tool to
// produce the type library (OOPCOM.tlb) and marshalling code.
import &oaidl.idl&;
import &ocidl.idl&;
uuid(DB20D9BF-FAA4-4D23-9243-1A),
helpstring(&ISimpleClass Interface&),
pointer_default(unique)
interface ISimpleClass : IDispatch
[id(1), helpstring(&method HelloWorld&)] HRESULT HelloWorld([out,retval]BSTR *result);
uuid(FE0FAA57-2E27-425F-9FA3-518E73F729FB),
version(1.0),
helpstring(&OOPCOM 1.0 Type Library&)
library OOPCOMLib
importlib(&stdole32.tlb&);
importlib(&stdole2.tlb&);
uuid(1CF4A019-A754-44F1-B164-047A3F0AC184),
helpstring(&SimpleClass Class&)
coclass SimpleClass
[default] interface ISimpleC
本文主要介绍以下几个COM相关常见概念:
COM Interface
Type Library
Application ID &Name
COM的相关表项在注册表中的位置及其意义:
表项一:COM Interface
注册表路径 : HKEY_CLASSES_ROOT\Interface\[X] 或者:HKLM\Software\Classes\Interface\[x]
在以上的OOPCOM.idl,我们看到其Inferface ID (IID)为DB20D9BF-FAA4-4D23-EB4482A,其在Register中的位置如图所示。
在COM的Interface表项中包含
ProxyStubClsid :该键值的具体内容请参考下图。
ProxyStubClsid32 :该键值的具体内容参考下图。该键值与ProxyStubClsid相同值。
TypeLib: 与该interface相关的COM 类型库定义。
在Interface中,有关ProxyStubClsid和ProxyStubClsid32所指向的CLSID值如下图所示:
ProxyStubClsid键值和ProxyStubClsid32起什么作用呢?这需要对COM client和COM service是如何进行通讯和数据交换的有所了解。
当COM client和COM Server application不在同一个进程地址空间时,COM会建立一个客户端的proxy和server端的stub。例如当client调用CoCreateInstance()时,在服务器将接口指针返回给COM之后,COM将接口指针返回给client之前,COM为指定的接口创建proxy和stub并将指向proxy的指针返回给client。我们把类似这样的过程叫做Marshaling (汇集)。
开发人员可以实现IMarshal这个interface来支持自定义的Marshaling。而如果对象不支持自定义Marshaling,则COM使用proxy和stub程序执行标准Marshaling,因此COM必须从注册表中获得提供proxy和stub程序生成器的DLL的CLSID。这就是我们为什么ProxyStubClsid(32)的意义所在。
如果开发的COM支持自动化技术,即实现了IDispatch interface(支持解释型语言的调用,如vbscript等),则其Marshaling的DLL一般为以上所示的oleaut32.dll (16bit系统则为ole2disp.dll)。如果其不支持该技术,则其Marshaling的DLL一般为ole32.dll
表项二:COM Class
注册表路径: HKEY_CLASSES_ROOT\CLSID\[X] 或者:HKLM\Software\Classes\CLSID\[x]
缺省情况下,在CLSID下面包含以下键值(如上图所示)
LocalServer32
Programmable (omitted)
LocalServer32:
该键用来指定运行在进程外的COM Server Application的.EXE文件path。与之相似的一个表项是:InprocServer32。COM运行模式有2种,一种为进程内模式,即COM与Client在同一个进程内存之内,运行在这种模式下的COM必须只能为*.DLL,指定其具体COM module的path的时候,即用InprocServer32来指定;另外一种是Out of Process(OOP),即Client和COM Server Application位于不同的Process地址空间,而这种COM必须为*.EXE,指定其具体COM module 的path时候,即用LocalServer32来指定。
而这两种模式下的COM调用过程也不尽相同。
1.服务器为*.DLL时,调用过程如下所示:
2. 当服务器为*.EXE 时,其过程如下所示:
实际上ProgID和CLSID都是一回事,只不过是2种不同的叫法而已,ProgID可以说是CLSID的nickname吧。相对于CLSID一串16bytes的难以记忆的数字, ProgID显得更为人性化,系统提供了相应API: GetClsIdFromProgid(t_ProgID) 可以实现ProgID和CLSID之间的互换。
不用多讲了, 该键在COM interface键中也出现过,用来指定该COM的类型库文件。
既然在COM Interface和COM class中都出现了Type Library,那就看看TypeLib 键吧。
表项三: COM Type Library
注册表路径: HKEY_CLASSES_ROOT\TypeLib\ [X]
TypeLib的各项键值如上图所示。
还有一项不太注意的Register Entry就是AppID。当把COM注册到系统之后,系统会在 HK_ROOT\AppID 下面生成一个指向该COM的AppID Entry。缺省情况下,会使用COM module name作为该Application name,从而使得该COM/DCOM 可读。如下图5在dcomcnfg.exe中所示,该AppID和一个readable的Application Name对应起来。
表项四:COM Application相关注册表项
注册表路径: HKEY_CLASSES_ROOT\AppID\[X]
希望以上内容对您有所帮助
Winston He
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致python 操作注册表详解
&&&&&&& 因为经常重装,所以想能不能有个办法可以很快的将开发环境从一个机器搬到另一个地方。需要处理的有几部分数据:1、代码和文档拷贝&& 因为代码大部分都在svn中,因此代码的拷贝只需要考虑拷贝部分没有纳入svn的即可。&& 文档因为相当部分没有在svn中因此需要拷贝。2、开发工具的安装或拷贝&& 尽量采用绿色版的,直接拷贝到指定的目录即可。3、环境变量的设置&& 根据开发工具的拷贝位置设置环境变量。拷贝的问题很好解决,手工拷贝也不麻烦,关键是环境变量设置有点恼火,因此打算采用python来处理。下面是简单示例,打算下周再根据实际情况完善这个代码。# -*- coding: utf-8 -*-__author__="nxf"__date__ ="$ 15:28:39$"from winreg import *PATH = "RM";#追加值到指定value_name的值中def append_value(key,value_name,value):&&& old_value,type_id = QueryValueEx(key,value_name)#&&& 确保原来的值中没有包含新加入的值&&& if (old_value.find(value) == -1):&&&&&&& SetValueEx(key,value_name,0,REG_SZ,old_value ";" value)&&&&&&& print ("append value(" value ") to " value_name);def create_mvn_env():&&& print ("create_mvn_env.......")&&& env =& OpenKeyEx(HKEY_LOCAL_MACHINE,&&&&&&&&&&&&&&&&&&& "SYSTEM\ControlSet001\Control\Session Manager\Environment",&&&&&&&&&&&&&&&&&&& 0,&&&&&&&&&&&&&&&&&&& KEY_SET_VALUE|KEY_READ&&&&&&&&&&&&&&&&&&& )&&& SetValueEx(env,"M2_HOME",0,REG_SZ,"D:\SDK\apache-maven")&&& SetValueEx(env,"M2_RESPOSITY",0,REG_SZ,"e:\lib")&&& append_value(env,PATH,%M2_HOME%\bin)&&& print ("create_mvn_env ok!")def display_reg():&&& env =& OpenKey(HKEY_LOCAL_MACHINE,&&&&&&&&&&&&&&&&&&& "SYSTEM\ControlSet001\Control\Session Manager\Environment"&&&&&&&&&&&&&&&&&&& )&&& try:&&&&&&& i = 0&&&&&&& while 1:&&&&&&&&&&& name,value,type = EnumValue(env,i)&&&&&&&&&&& if (name == PATH):&&&&&&&&&&&&&&& print (value)&&&&&&&&&&&&&&& break&&&&&&&&&&& i
= 1&&& except WindowsError:&&&&&&& printif __name__ == "__main__":&&& create_mvn_env();&&& display_reg();需要注意的是,我发现CreateKey()是创建“目录”,要设置“叶值”需要使用Ex结尾的代码。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'RegCloseKey函数释放给定键的句柄。
LONG RegCloseKey(
// 要关闭键的句柄
hKey 要关闭已打开键的句柄。
如果调用成功,返回ERROR_SUCCESS。
如果调用失败,返回非零错误代码(定义在WINERROR.H)。你可以使用带有FORMAT_MESSAGE_FROM_SYSTE标记 函数获得普通错误描述信息。
这个给定键的句柄不应该在它关闭后使用,因为它不再有效。键句柄不应该比需要的时间短。
RegCloseKey在返回之前不需要往注册表中写信息;它可以花费几秒缓存到硬盘的缓存区。如果一个应用程序必须明确的写注册信息到硬盘,它可以使用RegFlushKey函数。RegFlushKey,然而使用了更多的系统资源,应该在必需时才调用它。
Windows CE: RegCloseKey函数总是在返回前写信息到注册表,在Windows CE去除了缓存键的需要。
&&Windows NT: 需要3.1或更高版本。&&Windows: 需要Windows 95或更高版本。&&Windows CE: 需要1.0或更高版本。&&头文件: winreg.h。&&输入库: advapi32.lib。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:99486次
积分:1453
积分:1453
排名:第19661名
原创:24篇
转载:102篇
评论:16条
(1)(2)(4)(3)(3)(9)(18)(86)

我要回帖

更多关于 如何写注册表 的文章

 

随机推荐