我正在尝试使用免注册的WinRT,方法是将https://blogs.windows.com/windowsdeveloper/2019/04/30/enhancing-non-packaged-desktop-apps-using-windows-runtime-components/后面的应用程序清单添加到我的DLL中,该DLL用作进程内COM服务器。
但是,在实例化运行时类时,我会得到REGDB_E_CLASSNOTREG。我使用mt.exe来确保清单是嵌入的。我在Win-10 2004。这是否应该适用于win32 in-proc DLL服务器?是否有API调用来手动注册组件?
发布于 2020-10-26 12:25:19
看起来,https://stackoverflow.com/a/48308884中的加载器并没有将Dll激活上下文用作活动激活上下文。
相反,我们必须保存上下文并在实例化我们的运行时类之前激活它,如下所示:
在DllMain中:
if (dwReason == DLL_PROCESS_ATTACH)
{
GetCurrentActCtx(&hActCtx);
}在实例化Runtime类之前:
ActivateActCtx(hActCtx, &cookie);
Class1 c;
DeactivateActCtx(0, cookie);
auto x = c.MyProperty();通过手动使用激活上下文API以及DLL中嵌入的清单,我无需注册即可使用winrt组件。
https://stackoverflow.com/questions/64521400
复制相似问题