jjzjj

windows - 尝试使用在 IDL 中创建的 COM 对象时出现链接器错误

我想在我的VS2012项目中使用一个COM对象。为了这些目的,我得到了一个描述该对象的IDL文件。我使用MIDL生成了一个(部分)如下所示的头文件:EXTERN_CconstCLSIDCLSID_COComponent;#ifdef__cplusplusclassDECLSPEC_UUID("blablabla")COComponent;#endif但是,当我将此header包含到我的项目中并尝试在CoCreateInstance调用中使用CLSID_COComponent时:。CComPtrm_IModelService;hRes=m_IModelService.CoCreateIn

windows - 如何在 WiX 片段中获得编辑注册表 CLSID 的提升权限

我正在尝试将Windows桌面搜索设置为使用不同于系统默认过滤器(nlhtml.dll)的html过滤器。当我查找PersistentHandler(HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.html\PersistentHandler)时,它指向HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{eec97550-47a9-11cf-b952-00aa0051fe20}.我想改变上面clsid的值。以下是WiX片段但值没有改变。关于许可;只有TrustedInstaller可以完全控制此条目。Administrator

windows - 多个 ProgID 可以指向同一个 ClsID 吗?

我正在研究一组本质上是插件的东西,它们是COM服务器。每个插件都有一组由另一个组件管理的配置数据,配置数据的主键是插件的ProgID。当插件需要访问配置项时,它会调用并传入其ProgID和所需属性的名称。这是一个遗留设计,我必须保持向后兼容性。我现在需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个唯一的ProgID,每个ProgID将指向插件的单个ClsId。因此,插件的每个实例都将由其ProgID标识,ProgID仍用作配置数据的主键,并且一切都是100%向后兼容的。那么,问题:这是一种可以接受的技术吗?(多个ProgID都指向一个

windows - 如何获取已注册COM接口(interface)的IID?

我知道我可以从Classes\\CLSID\@的注册表中的COM类对象中读取CLSID.我怀疑在注册的COM接口(interface)上我可以从Classes\\IID\@读取IID或Classes\CLSID\\IID.我已阅读文章COMIDs&Registrykeysinanutshell这个问题对我来说仍然是开放的。不幸的是,我现在没有测试用例。 最佳答案 注册表并不是一种编程资源,注册表项仅在COM基础结构需要时才存在。例如,CLSID键是帮助COM找到实现服务器的可执行文件所必需的,程序员必须提供CLSIDguid。他还需

c++ - 如何为 SENS 事件注册接收器对象

我在看MSDN文档说我可以CoCreateInstanceaSENSobjectusingitsCLSID.但是,尚不清楚__uuidof(SENS)是否意味着什么——因为它只是Sensevts.h文件中的前向声明。此外,SENS类仅提供“传出”接口(interface),并被标记为“不可创建”(通过MSComViewer查看),这让我不知道如何引用SENS对象本身的实例。这与获取instanceofIShellLink的示例代码形成对比:HRESULThr;IShellLink*pISL;hr=CoCreateInstance(CLSID_ShellLink,//CLSIDofcoc

c# - 如何使用进程 ID 获取 Excel 实例或 Excel 实例 CLSID?

我正在使用C#,我需要通过进程ID获取特定的excel实例;我从另一个应用程序获得了我需要的实例的进程ID,但我不知道还能做什么,我不知道如何根据他的进程ID获得正在运行的excel实例。我在网上做了很多研究,但我只看到使用Marshal.GetActiveObject(...)或Marshal.BindToMoniker(...)的示例,我无法使用,因为第一个返回在ROT中注册的第一个Excel实例并不完全是我需要的实例,第二个实例要求您在尝试获取实例之前保存excel文件。另外,如果我在哪里能够使用进程ID获取我需要的excel实例的CLSID,那么我可以调用GetActiveOb

c++ - 未解析的外部符号 _IID/_CLSID

我使用MSVC2010创建了一个带有简单默认ATL对话框的默认ATL项目。然后我将第二个项目添加到名为MyControls的解决方案中,我在向导的帮助下在其中创建了ATLDHTML控件。然后我将ATLDHTML控件放置到ATL对话框中。现在我想在ATL对话框的OnInitDialog函数中调用该ATLDHTML控件的一些方法。为了能够调用这样的电话:CComPtrptr;HRESULThr=GetDlgControl(IDC_ACTIVEX_CONTROL_DHTML,IID_IDHTMLControl,(void**)&ptr);我包含了来自MyControls项目的文件DHTMLC

c++ - 如何从 ProgID 或 CLSID 获取类型库(不加载 COM 对象)?

在给定类型库中包含的COM类的ProgID或CLSID的情况下,如何以编程方式获取类型库的路径或LIBID,而不实例化COM对象?对于某些COM对象,您可以通过注册表路径实现HKEY_CLASSES_ROOT\CLSID\{clsid}\TypeLib但是有些COM对象没有TypeLib键,比如Word.Application:如何在不实例化COM对象的情况下确定这些COM对象的类型库路径或LIBID? 最佳答案 类型库可能与给定的CLSID相关联,也可能不相关联。如果您在注册表中没有类型库引用,您可能更幸运地在运行时使用IDisp

c++ - 如何使用 CoCreateInstance() 获取 com 对象?

我已经注册了一个COM组件。我想调用它。CLSIDclsid;RIIDiid;HRESULThr=CLSIDFromProgID(OLESTR("se.mysoft"),&clsid);LPVOID*pRet;HRESULThr1=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,iid,pRet);我可以成功获取clsid,但是我在哪里可以获取iid?我用OLEVIEWER查找界面:[odl,uuid(F3F54BC2-D6D1-4A85-B943-16287ECEA64C),helpstring("IsesoftInterface")

windows - 获取 DLL 文件的 CLSID?

我想创建一个小应用程序来从注册表中添加和删除用户定义的上下文菜单条目。为此,我需要以某种方式获取任意DLL的CLSID,以便在编写新条目之前备份以前的条目(如果它们存在)。尽管regsrv32以某种方式设法创建了这个神奇的数字,但我自己没有找到任何方法来获得该数字。我希望有比这更好的东西:为DLL名称扫描注册表如果没有找到,注册,重新扫描,然后重新注销如果DLL已重命名,我可以看出问题的可能性。 最佳答案 您可以考虑调用LoadTypeLibEx在指定REGKIND_NONE的DLL上,然后检查获取TypeLibInfo通过ITyp