RegFreeCom没有从progid解析clsid

时间:2015-12-31 10:03:20

标签: 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" version="1.0.0.0" />
    <file name="acme.ocx">
        <comClass progid="acme.acme.1" clsid="{5C40FA06-EABB-4633-8938-9394F2C933E1}" threadingModel="Apartment" />
    </file>
</assembly> 

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

我的应用程序的main.cpp看起来像这样:

#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;
}

当我调试它并从CLSIDFromProgID检查结果时,尽管返回了S_OK,但clsid包含的垃圾值与清单中指定为comClass clsid的clsid不同。查询不同的clsid确实会返回一个空的clsid和一个E_INVALIDCLA​​SSNAME错误。

粘在一个新鲜的clsid。在本地测试。仍然失败。

0 个答案:

没有答案