- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在关注这个网站教程:
http://progtutorials.tripod.com/COM.htm
初步证据:Visual Studio 2010、Windows 7 64 位。
并且我正在对第 3 部分中的示例进行编码。(实现服务器 DLL)。我已经完全按照所示输入代码,并且在第 4.1 节中概述的代码的第 12 行执行此代码时出现“类未注册”异常(教程向您展示了如何访问 DLL,我有按照 3.1 的要求):
hresult hr = CoGetClassObject(CLSID_Car, CLSCTX_SERVER, NULL, IID_IClassFactory, (void **) &pClassFactory);
我试过运行:
regsvr32 xyz.dll
xyz.dll 是我的 dll 的路径,以便注册 DLL。这导致在尝试查找 DLLRegisterServer 时出错:
我已经跑了
REGEDIT
HKEY_CLASSES_ROOT\CarDLL.Car\CLSID = {d969084c-b758-43ea-a218-a48763167abd}
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd} = CarDLL.Car
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd}\InProcServer32 = C:\Users\wiocl2\Documents\Visual Studio 2010\Projects\CarDLL\debug\CarDLL.dll
我假设将我需要的所有 GUID 都放在注册表中(GUID 是由我生成的)。
我假设需要将一个函数添加到允许它注册的类中,但我不知道如何执行此操作以及如何弄清楚它。我有点迷茫,因为我已经很长时间没有使用 COM 了。如果有人能在正确的方向上插入我,那将会很有帮助。
编辑:哦,是的,我搬家了 #include//包含 DEFINE_GUID 的定义
从 iid.cpp 到 iid.h 文件,否则我在构建时遇到 Unresolved external 错误。
最佳答案
最可能的解释是:您将 COM 对象构建为 32 位 DLL,但注册是作为 64 位 DLL 执行的。
处理方法:打开管理员权限命令窗口并导航到 DLL 的位置 (C:\Users\wiocl2\Documents\Visual Studio 2010\Projects\CarDLL\debug)。在那里,输入:
c:\windows\sysWOW64\regedit <filename of .reg file whose contents are displayed above>
这将运行 32 位版本的 REGEDIT,确保在配置单元的正确部分创建注册表条目。要验证这一点,您应该在 HKLM\Software\Wow6432Node\Classes\CLSID 中看到 {d969084c-b758-43ea-a218-a48763167abd}
的条目,不是 HKLM\Software\类\CLSID。
DllRegisterServer
是一种可以在 COM 服务器 DLL 中实现的方法,如果您想使用 regsvr32
执行与当前使用 . REG 方法。同样的警告适用:对于 32 位 DLL,您需要调用 c:\windows\sysWOW64\regsvr32.exe
。
是的! COM 仍然大部分仍然存在并且很好 :) 至少在 VS 2012 中仍然有对它的标准支持。
希望对您有所帮助。
关于c++ - HRESULT "Class Not Registered"实现简单的 COM 服务器 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15010702/
有人可以帮我解码这个 HResult 吗?这是什么意思?我知道消极代表着失败。剩下的 10 位怎么样? 我引用了MSDN HResult文章here ,但我不确定如何确定我的设施和代码位是什么。 更多
假设我有一个设计得不太好的 COM 接口(interface),并且某些类在逻辑上无法实现它的方法之一。 例如,有一些方法,如 Explode()许多类只是不能合理地“爆炸”,但仍然必须实现该方法并需
嗨,我设计了一个控制台应用程序来测试我的 C++ 项目(.Net Framework 3.5)。我为此应用程序创建了一个设置并将其安装在虚拟机上以进行测试。但是每当我在虚拟机上运行这个已安装的应用程序
是否有解释错误代码的列表。 Eks:HRESULT:0x81070215 没有告诉我什么时候出错了? 最佳答案 WinError.h 我的机器上有以下路径,你的也类似: C:\Program File
我正在开发一个供 Microsoft .NET 和 COM 组件使用的 Microsoft .NET 程序集。我正在编写托管代码,并且必须指出何时为类中的方法指定了不正确的参数。当出现参数异常时,我需
我在 IUnknown 派生的 COM 接口(interface)中有一个函数: HRESULT GetPassword( [in] long bufferLength, [out] WCHAR* b
类似问题was asked before ,但我还没有在那里找到一些答案。 据我所知,为了制作自定义 HRESULT 代码,我创建了一个 .mc 文件,我在其中描述代码,然后编译它并获得一个 .h 文
我已经有一个使用大量 COM 和 HRESULTS 的项目。无论如何,我想知道是否可以定义自己的 HRESULT,并且能够将 FormatMessage() 用于我们自己的 HRESULT? 我翻遍了
我发现有时在 IO 操作中常见 IOException被抛出。我可以使用 Marshal.GetHRForException(Exception e)方法(找到 here )以确定具体的错误代码。之后
感谢任何帮助: 我正在 VS2010 中开发一个与 Excel 交互的 C#.Net 应用程序。该应用程序在我的本地计算机上正常运行。但是,上传到远程 Windows 2003 服务器会破坏应用程序。
我在使用 Windows.Media.Capture 命名空间中的 MediaCapture 对象时收到此异常消息 Exception from HRESULT: 0xC00D36B4。当我尝试使用
十进制:143196173 十六进制:0x889000D 调用 IAudioSessionControl2->GetProcessId() 的结果. GetLastError = 126* Messa
我只是花了 way 太长时间试图诊断为什么在下面的代码片段中,ProcessEvent() 方法似乎忽略了 false 我为 aInvokeEventHandler 传入的值: HRESULT CEv
以下 EndDraw() 函数返回 HRESULT 错误代码: http://msdn.microsoft.com/en-us/library/windows/desktop/dd371924%28v
我需要将 HRESULT 值作为命令行参数传递给程序。我本来打算通过传递十六进制值来做到这一点,例如: >receiver.exe 0x80048836 我正在尝试使用 wcstol 将此字符串表示形
我希望能够执行与 FormatMessage 等效的操作 - 生成用于调试甚至运行时构建的文本消息,可以报告一些常见的 HRESULT,甚至吐出诸如严重性、它的功能等信息是,可能还有错误代码的描述。
为什么在定义错误/HRESULT 处理/日志记录时会选择或不选择使用宏? 我正在处理一个通过接口(interface)调用的错误处理类,因此我可以使用 Boost 共享指针在我需要的时间和地点调用该类
这个问题在这里已经有了答案: Is there a way to get the string representation of HRESULT value using win API? (4 个
我在 Windows Vista 上使用 .NET Framework 6.0 版。我最近安装了一个显示图表的程序。当我打开它时,我收到一条来自 Microsoft .NET 框架的错误消息: Cla
我想测试下面的代码: private bool TestException(Exception ex) { if ((Marshal.GetHRForException(ex) & 0xFFF
我是一名优秀的程序员,十分优秀!