如何解决DLL的免注册WinRT组件
我试图通过将https://blogs.windows.com/windowsdeveloper/2019/04/30/enhancing-non-packaged-desktop-apps-using-windows-runtime-components/之后的应用程序清单添加到用作进程内COM服务器的DLL中来使用免注册WinRT。
但是,当实例化运行时类时,我得到REGDB_E_CLASSNOTREG
。我使用mt.exe
来确保清单已嵌入。我使用的是Win-102004。这是否适用于Win32进程内DLL服务器?是否有API调用来手动注册组件?
解决方法
加载器似乎没有将Dll激活上下文用作 active 激活上下文,如https://stackoverflow.com/a/48308884所示。
相反,我们必须在实例化运行时类之前保存上下文并激活它,如下所示:
在DllMain中:
if (dwReason == DLL_PROCESS_ATTACH)
{
GetCurrentActCtx(&hActCtx);
}
在实例化Runtime类之前:
ActivateActCtx(hActCtx,&cookie);
Class1 c;
DeactivateActCtx(0,cookie);
auto x = c.MyProperty();
通过手动使用激活上下文API和DLL中的嵌入式清单,我可以使用winrt组件而无需注册。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。