问题标签 [clsid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1153 浏览

c++ - C++ MFC 从 CLSID (GUID) 创建 IShellItem

我必须为 Windows 帮助和 Windows 运行创建一个 ShellItem...

我有这个

来自http://www.sevenforums.com/tutorials/110919-clsid-key-list-windows-7-a.html

我试过了

它返回 OK 但 Null 作为 pidl2

你们能给我一些帮助吗?

0 投票
1 回答
816 浏览

com - CLSID 自动生成的默认规则是什么?

我们有一个 COM 组件项目和一个注册 COM 组件的 Windows 安装项目。我检查了安装项目的先前版本,似乎为 COM 项目中的类生成的 CLSID 总是发生变化,即使有时这些类没有变化。这在某种程度上是我们想要的方式,因为我们希望在同一台机器上保留不同版本的实现。但是,当我手动构建此项目并在同一天多次使用 /regfile 选项运行 regasm.exe 时,生成的 reg 文件中的 CLSID 始终相同。它认为在以前的情况下它们发生了变化,这是因为它们是在不同的日子建造的,但我不确定。那么谁能告诉我这个 CLSID 自动生成的(默认)规则是什么?我认为我们正在使用项目中的默认设置。

我不确定程序集版本是否会影响结果。但是我们将程序集版本号指定为 Major.Minor.*,这意味着第三个数字(内部版本号)是自 1.1.2000 以来的天数,第四个数字(修订号)是自午夜以来的秒数除以 2。在 CLSID 发生变化的情况下,即使类代码不变,主次编号也相同。因此,如果版本号确实影响 CLSID,我可以说它不仅考虑了主要和次要数字。

当然,我们没有为这些类分配静态 GUID,否则它不会在我们的安装项目中改变。

谢谢你的帮助!

0 投票
1 回答
326 浏览

python - 为什么genguid.exe 生成的clsid 不起作用?

我正在尝试修改 pywin 演示中的 exceladdin.py 示例。

否则我可以修改它,但是当我替换示例中给出的 clsid 时:

使用由 genguid.exe 或 pythoncom.CreateGuid() 生成的,例如:

com 插件停止工作。没有跟踪,没有错误,只是 excel com-objects 列表中的以下文本(翻译)“未加载加载项。加载 com 对象时运行时出错。”

我错过了生成 clsid 的步骤吗?

编辑:我想我发现了问题...... clsid 是 dll 的 id。在 python 的情况下,clsid 指的是 pythoncomloader27.dll。这是正确的吗?...但我仍然无法加载正确的 python 文件。clsid 以某种方式链接到 pythoncomloader 和原始 pythonfile。如果我生成一个新的 clsid,我必须将它链接到 pythonloader?如何?

0 投票
1 回答
831 浏览

.net - 当只有 CLSID 不同时,创建对两个 COM 组件的 .NET 项目引用?

简短的:

如何在 .NET 项目中创建两个对除了 CLSID 之外相同的非托管 COM 组件的两个引用?它们具有相同的 ProgID 和相同的类型库。

当我尝试创建第二个引用时,类型库是 Visual Studio 抱怨的:

无法添加对“XXX 类型库”的引用。已存在对此类型库的引用。在添加此之前,您必须删除引用“XXX”。

提前致谢。


详细的:

我正在创建一个 WPF 应用程序,它提供与另一个应用程序的集成。另一个应用程序有点不寻常,因为它的版本作为单独的应用程序安装。用户可以在他们的计算机上同时运行多个版本的应用程序。

我的单个 WPF 应用程序应该允许用户选择他们想要使用的其他应用程序的版本。另一个应用程序为每个安装的版本都有一个非托管 COM DLL,我用它来创建我的 WPF 应用程序和这个其他应用程序之间的集成。

我的 WPF 应用程序在使用对版本 1 的非托管 COM 组件的引用的其他应用程序的第一个版本中运行良好。当我尝试引用第二个版本的 COM 组件时,问题就开始了。

在 WPF 项目中使用“添加引用”时出现以下错误: 无法添加对“XXX 类型库”的引用。已存在对此类型库的引用。在添加此之前,您必须删除引用“XXX”。

对注册表的检查表明,两个版本的 COM 组件的注册表信息的唯一区别是 CLSD 和实际 DLL 的路径。两个组件的 ProgID 和 TypeLib 值相同。

由于其他应用程序的版本确实被视为单独的应用程序,我希望将 COM 组件安装为不同的应用程序,并且我正在与公司合作开发下一个版本。

现在我一直在尝试将第 2 版集成到我的 WPF 应用程序中。我看过很多关于 外部别名以及如何手动编辑项目文件以引入别名的帖子,但它们似乎都是从托管程序集而不是非托管 COM 组件开始的。对于引用的非托管 COM 组件,项目文件的内容是不同的,并且由于我无法创建第二个引用,因此向项目文件中的引用添加别名标记对我没有帮助。

我见过人们谈论使用 System.Addin 和反射,但我想确认在研究更复杂的方法之前没有更直接的方法。

感谢您阅读到这里!


按照 CasperOne 的建议,我做了以下事情:

  1. 使用 Visual Studio 命令提示符运行以下命令:tlbimp "c:\xxx1.dll" /out:"c:\NETxxx1.dll"
  2. 使用 Visual Studio 命令提示符运行以下命令:tlbimp "c:\xxx2.dll" /out:"c:\NETxxx2.dll"
  3. 添加了两个新创建的 DLL(我猜是互操作的)作为对我的测试项目的引用。我使用“浏览”选项卡来查找它们。
  4. 我添加了几乎遵循 casperOne 的代码示例的代码。

我对为我的 COM 接口使用什么名称感到有点恐慌。在我使用的 COM 对象的情况下,有一个主接口对象,并且我从该 COM 对象使用的所有其他对象都是从该主接口对象内实例化的(即,我进行如下调用:Foo x = y. GetNewFoo();)。

0 投票
3 回答
459 浏览

c# - C#:System.Runtime.IntropServices.COMException:检索具有 CLSID 的组件的 COM 类工厂

我正在开发一个 MS word 模板生成器,它的工作原理是这样的:

用户打开网页填写一些文本框,标记一些复选框,然后单击按钮,打开word文档(我之前定义的模板以及所需的所有书签),使用他在网页中输入的内容,全部在文档中并且字段和复选框标记为他标记的,他只需要打印文档。它在我的电脑上完美运行

但是当我在服务器上测试时,出现了错误: 在此处输入图像描述

我的代码:我已包含参考 ( using Word = Microsoft.Office.Interop.Word;)

知道我正在研究:Visual Studios C# 2010 和 Microsoft .NET Framework 4.0 在服务器上是:Visual Studio C# 2005,MS Framework 2.0

知道可能是什么问题吗?

0 投票
1 回答
1319 浏览

vb.net - VB.net 类未注册错误

我正在编写一个 VB 应用程序,但是每当我运行该应用程序时,我都会收到下面列出的错误:

“创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:检索具有 CLSID {11219420-1768-11D1-95BE-00609797EA4F} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))。”

我已经尝试注册 shell32.dll 文件,我在注册表中查看了条目 {11219420-1768-11D1-95BE-00609797EA4F} 但它不存在,并且我尝试为 x86 编译此应用程序。

其他信息:我在 Windows 7 64 位机器上。我有 .Net 4.0 和以前的版本,并且在 Visual Studio 2012 中工作。我还在我的项目中添加了 shell32.dll 作为参考。任何解决此问题的帮助将不胜感激。

谢谢。

0 投票
2 回答
2177 浏览

c++ - 在 Windows 中,UuidFromString 和 CLSIDFromString 之间有区别吗?

我只想仔细检查哪一个对于内部生成的与 COM 类无关的 GUID 是正确的。

我怀疑它是 UuidFromString,但我一直看到使用 CLSIDFromString 的代码。我有一个模糊的回忆,CLSIDFromString 可能会枚举注册表中列出的 COM 类,但不确定这是否正确。

0 投票
2 回答
1619 浏览

c++ - 为 GUID 值专门化一个模板

这是对为什么不是来自常量 POD 对象常量本身的字段的跟进?

库中的标头声明类 GUID,例如

我想编写一个直接从dll创建对象的函数,不需要注册dll,所以我需要将每个CLSID映射到dll名称。就像是

这将取决于专业化,例如

因此,尝试使用未知 dll 实例化未注册的类是编译时错误。

问题是模板不能专门用于 GUID。链接的问题说 constexpr 将允许以允许专业化的方式声明 GUID,但 Visual C++ 在最新版本(2012)中不支持 constexpr。任何解决方法?

0 投票
2 回答
2387 浏览

windows - 是否有 Windows 注册表的已知 CLSID 的列表?

在 Windows 注册表中驻留许多 CLSID 值(在 中HKEY_CLASSES_ROOT\CLSID),例如{16d51579-a30b-4c8b-a276-0ff4dc41e755},其中许多可能属于广为人知的甚至是内置的应用程序或库。是否有包含这些映射的列表或数据库?

一些用法是,在注册表查看器中显示更有意义的名称以及键,或者检查特定应用程序是否存在(或存在但不再存在)但在注册表中留下了一些键。

0 投票
1 回答
1812 浏览

c# - 为 64 位项目调用 C# 中的 Javascript 函数

我正在尝试从 C# 代码内部调用 Javascript 函数“eval”(以将字符串用于运算符解析器)。我使用了以下代码: https ://stackoverflow.com/a/12431435/712700

但它会崩溃并显示以下消息---:

异常详细信息: System.Runtime.InteropServices.COMException:检索具有 CLSID {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154(REGDB_E_CLASSNOTREG) ))。

我相信问题是因为项目/机器是 64 位的。我不想将项目更改为 32 位,是否可以使用另一个 CLSID 使其与 64 位一起使用?或者是否有另一种方法可以在 C# 代码中简单地利用 Javascript 中的“eval”函数?