标签: clsid

Windows 64位注册表与32位注册表

我听说在Windows x64架构上,为了支持运行x86和x64应用程序,有两个独立/不同的Windows注册表集 - 一个用于x86应用程序访问,另一个用于x64应用程序访问?例如,如果COM在x86注册表集中注册CLSID,那么x64应用程序永远无法通过CLSID访问COM组件,因为x86/x64具有不同的注册表集?

所以,我的问题是我对上述样本的理解是否正确?我还想获得更多文档来学习这个主题,关于x64架构上的两个不同的注册表集.(我做了一些搜索,但没有找到任何有价值的信息.)

com registry 64-bit x86 clsid

41
推荐指数
2
解决办法
7万
查看次数

如何在给定CLSID的情况下找到DLL?

我有一种情况,其中托管DLL调用一些非托管DLL.我知道非托管DLL的CLSID,有什么方法可以找出哪个二进制文件包含那个CLSID?

dll clsid

29
推荐指数
2
解决办法
4万
查看次数

获取DLL文件的CLSID?

我想创建一个小应用程序来添加和删除注册表中的用户定义的上下文菜单项.为了实现这一点,我需要以某种方式获取任意DLL的CLSID,以便在写入新条目之前,如果它们存在,我可以备份它们.

虽然regsrv32不知怎的设法创造了这个神奇的数字,但我没有找到任何办法自己获得这个数字.

我希望有比这更好的东西:

  1. 扫描DLL名称的注册表
  2. 如果未找到,请注册,再次扫描,然后再次注销

如果DLL已重命名,我可以看到出现问题的可能性.

windows com dll clsid

11
推荐指数
1
解决办法
7468
查看次数

GDI +是否有标准图像编码器CLSID?

GDI + Image::Save方法需要CLSID参数来指定要使用的编码器.该文档指向一些示例代码,用于获取与特定MIME类型相关联的编码器,例如image/jpeg或image/png.但是我想到复制一个半页函数只是为了支持一行调试辅助,我将中间结果保存到磁盘.

不应该有标准编码器的标准CLSID列表吗?我在哪里可以找到这样的清单?我无法通过搜索Microsoft的包含文件找到一个.

c++ winapi gdi+ clsid

11
推荐指数
2
解决办法
6610
查看次数

使用Interop.MODI会引发0x80040154异常

我目前正在尝试实现Interop.MODI.dll(来自Microsoft Office)以使用它应该提供的图像 - >文本功能.但是在做的时候

var modi = new MODI.DocumentClass();
Run Code Online (Sandbox Code Playgroud)

我明白了:

"带有CLSID的COMException 80040154 {40942A6C-1520-4132-BDF8-BDC1F71F547B}".

我有什么办法解决这个问题?

我使用regasm工具注册了DLL:-Problem仍然存在

我尝试将BuildPlatform设置为x86:-Problem仍然存在

我使用Visual Studio 2010 Ultimate和Windows 7 Professional 64Bit并安装了Microsoft Office 2007

编辑:我找到了解决方案:

我需要在MS Office中安装"MS-Office-Document-Imaging"功能才能使其正常工作.(软件 - > MS Office(右键单击 - >编辑) - >添加功能 - > Microsoft Office Document Imaging)

c# com interop comexception clsid

8
推荐指数
1
解决办法
5022
查看次数

COM TreatAs如何(以及何时)起作用?

我正在查看vsjitdebugger.exe使用Process Monitor的注册表访问,我注意到有时以下列方式查询注册表(一些信息省略):

HKCU\Software\Classes\CLSID\{some-guid} NAME NOT FOUND  Desired Access: Read
...
HKCU\Software\Classes\CLSID\{some-guid}\TreatAs NAME NOT FOUND  Desired Access: Query Value
...
HKCU\Software\Classes\CLSID\{some-guid}\InprocServer32  NAME NOT FOUND  Desired Access: Read
...
HKCR\CLSID\{24E669E1-E90F-4595-A012-B0FD3CCC5C5A}\InprocServer32    SUCCESS Desired Access: Read
Run Code Online (Sandbox Code Playgroud)

有关MSDN上的TreatAs的信息表明,它允许为另一个将被调用而不是原始服务器的COM服务器指定GUID.

我无法找到关于此密钥的更多信息,并且我无法在我自己的COM对象上使用它:我有两个不同的相同COM对象的实现(在2个单独的DLL中,有2个单独的GUID) ,当我的进程通过GUID创建对象时,我希望它创建另一个对象(通过TreatAs中指定的GUID).不幸的是,似乎Windows立即尝试查询HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32,而不是首先寻找TreatAs.

我的问题基本上是关于TreatAs的规则,何时以及如何被查询?

com registry clsid

5
推荐指数
1
解决办法
1452
查看次数

regsvr32不会在注册表中创建任何条目

我在尝试注册DLL时遇到问题.我的操作系统是Windows 7(x64).

我以两种不同的方式做到这一点:

1)使用regsvr32.我收到消息"DllRegisterServer ... succeedeed",但我在注册表中找不到我的CLSID.(并且我在尝试使用此CLSID创建组件实例时出现"Class not registered"错误.)在这种情况下,我知道DllRegisterServer从未被调用(因为我在此函数的开头创建了一个文本文件而它不是创建).

2)显式加载我的DLL并调用DllRegisterServer.在这种情况下,DllRegisterServer返回S_OK,但仍然无法在注册表中找到我的CLSID并获得"Class not registered"错误.

我确定代码是正确的(因为它不能仅在我的操作系统上运行),所以似乎问题出现在操作系统中.有人遇到过这样的问题吗?

dll regsvr32 clsid

5
推荐指数
1
解决办法
1万
查看次数

由于以下错误,检索CLSID为{000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:8000401a

由于以下错误,检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:8000401a.

我们从SharePoint场环境中托管的生产服务器获得上述错误,因为无法从作为独立服务器的登台服务器重现相同的问题.

我希望,当从远程机器访问Microsoft.Office.Word组件时,上述错误将被抛出.我在DCOMConfig中的"启动和激活权限"下更新了所有用户,如检索具有CLSID错误的组件的COM类工厂中所述:8000401a

有趣的是,当用户不断点击我的网页中的"报告生成"按钮时,问题已自动解决.我理解这个问题似乎偶尔会发生,因为我们无法预测何时会抛出这个问题.

com components ms-word clsid

5
推荐指数
1
解决办法
2万
查看次数

专门为GUID值设置模板

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

来自库的头声明了类GUID

static const GUID CLSID_EH264VD = 
{ 0x96b9d0ed, 0x8d13, 0x4171, { 0xa9, 0x83, 0xb8, 0x4d, 0x88, 0xd6, 0x27, 0xbe } };
Run Code Online (Sandbox Code Playgroud)

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

Create<CLSID_EH264VD>()
Run Code Online (Sandbox Code Playgroud)

这将取决于专业化,如

template<>
struct dll<CLSID_EH264VD>
{
    char const* filename = ""mc_dec_avc_ds.ax";
}
Run Code Online (Sandbox Code Playgroud)

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

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

c++ com templates clsid

3
推荐指数
1
解决办法
1406
查看次数

VBA中出现运行时错误429,但是类已注册

我正在尝试重新创建一个使用javascript打开与PLC的连接,然后在网页上显示各种信息的程序。由于各种原因,我宁愿以MS Access的形式使用它,并且花了很多时间试图找到要使用的正确的dll(如果有人好奇,请使用Jet32X.dll)。最后,我将javascript中调用的CLSID追溯到PLC的注册类,然后尝试用VB代码创建该对象。它不会超出“ Dim As New”这一行,但是会引发运行时错误429:“ Active X组件无法创建对象”。真的希望我有更多关于为什么的信息。
我知道该课程已注册,因为这是我首先找到它的方式。我知道DLL文件没有损坏,因为该程序可以从JS版本正常运行。我暗中怀疑这里发生了某种不兼容,因为PLC和支持软件已经很老了,而我正在使用Microsoft Access 2013(及其关联的VBA)。但是,我真的想不出一种验证这一点的好方法。还有其他想法吗?还有其他原因导致此问题吗?

vba activex plc clsid ms-access-2013

2
推荐指数
1
解决办法
2208
查看次数