Windows RegFreeCom未从progid解析clsid

Windows RegFreeCom未从progid解析clsid,windows,regfreecom,Windows,Regfreecom,因此,我有一个COM对象,我正试图使用无注册COM加载它 我为.ocx创建了一个清单,如下所示: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="assembly1" vers

因此,我有一个COM对象,我正试图使用无注册COM加载它

我为.ocx创建了一个清单,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32" name="assembly1" version="1.0.0.0" />
    <file name="acme.ocx">
        <comClass progid="acme.acme.1" clsid="{5C40FA06-EABB-4633-8938-9394F2C933E1}" threadingModel="Apartment" />
    </file>
</assembly> 
#include <windows.h>
#include <ole2.h>
#pragma comment(linker,"\"/manifestdependency:type='win32' name='assembly1' version='1.0.0.0' \"")
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                 _In_opt_ HINSTANCE hPrevInstance,
                 _In_ LPWSTR    lpCmdLine,
                 _In_ int       nCmdShow)
{ 
  CoInitialize(NULL);
  CLSID clsid;
  auto result = CLSIDFromProgID(TEXT("acme.acme.1"), &clsid);
  CoUninitialize();
  return 0;
}

并在我的部署文件夹中将其保存为“assembly1.manifest”

我的应用程序的main.cpp如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32" name="assembly1" version="1.0.0.0" />
    <file name="acme.ocx">
        <comClass progid="acme.acme.1" clsid="{5C40FA06-EABB-4633-8938-9394F2C933E1}" threadingModel="Apartment" />
    </file>
</assembly> 
#include <windows.h>
#include <ole2.h>
#pragma comment(linker,"\"/manifestdependency:type='win32' name='assembly1' version='1.0.0.0' \"")
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                 _In_opt_ HINSTANCE hPrevInstance,
                 _In_ LPWSTR    lpCmdLine,
                 _In_ int       nCmdShow)
{ 
  CoInitialize(NULL);
  CLSID clsid;
  auto result = CLSIDFromProgID(TEXT("acme.acme.1"), &clsid);
  CoUninitialize();
  return 0;
}
#包括
#包括
#pragma注释(链接器“\”/manifestdependency:type='win32'name='assembly1'version='1.0.0'\“”)
国际货币基金组织,
_在当前情况下,
_在LPWSTR lpCmdLine中,
_In_uuint(nCmdShow)
{ 
共初始化(空);
CLSID-CLSID;
自动结果=CLSIDFromProgID(文本(“acme.acme.1”),&clsid);
coninitialize();
返回0;
}
当我调试它并检查CLSIDFromProgID的结果时,尽管返回S_OK,但clsid包含的垃圾值与清单中指定为comClass clsid的clsid不同。查询不同的clsid会返回空clsid和E_INVALIDCLASSNAME错误作为结果



粘在一个新的clsid上。在当地测试。仍然失败。

应该是这样的,clsid肯定不是“acme.acme.1”。如果你发布虚假信息,那么你只能得到虚假的帮助。为什么清单中clsid的值很重要?在我修补这个时,有很多剪切和粘贴操作,但这就是我的非工作示例所减少到的。好吧,这很奇怪:你在comClass的程序集清单中放入了什么CLSID并不重要,返回的CLSID将是不同的-但是如果您将不同的CLSID传递给CoGetClassObject,它实际上将创建对象的一个实例?垃圾值到底是多少?“垃圾”UUID是否在其他任何地方(注册表等)找到?应该是这样的,clsid肯定不是“acme.acme.1”。如果你发布虚假信息,那么你只能得到虚假的帮助。为什么清单中clsid的值很重要?在我修补这个时,有很多剪切和粘贴操作,但这就是我的非工作示例所减少到的。好吧,这很奇怪:你在comClass的程序集清单中放入了什么CLSID并不重要,返回的CLSID将是不同的-但是如果您将不同的CLSID传递给CoGetClassObject,它实际上将创建对象的一个实例?垃圾值到底是多少?是否在其他地方(注册表等)找到了“垃圾”UUID?