我找到了一种方法,通过绕过默认的激活工厂分辨率,在桌面上(没有app容器)利用cpp winrt进行C#/ C ++互操作。
我这样做的方法是将本机C ++函数作为工厂公开,返回我在P#中调用的IUnknown指针,然后调用Marshal.GetUniqueObjectForIUnknown(ptr)来获取我可以强制转换为WinRT接口的RCW。
我现在的问题是,我的C ++库链接到vcruntime140_app.dll而不是vcruntime140.dll,这使得它实际上不可再分发。有没有办法使cppwinrt lib链接到桌面C运行时? (我使用visual studio 2019预览模板)
我发现将AppContainerApplication
属性设置为false似乎有效。
我肯定会在github上解释我的解决方案。