问题标签 [wrl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1270 浏览

c++ - 未解析的外部符号 LNK2019,带有用于基于 COM 的库的 WinRT 组件

我在本机 WinRT 组件中使用名为 Engine 的第 3 方基于 COM 的库,该组件稍后应充当第 3 方库的包装器。在我的项目中设置了第 3 方库的 Engine.lib 和 Engine.h 文件。

我正在为我的以下 cpp 文件获取 LNK2019:

代码编译良好,并且在 VS2012 的项目设置中设置了 Engine.lib。Engine.lib 的 DUMPBIN /EXPORTS 也显示 CreateEngine 已公开。我也可以使用 Engine.h 中定义的其他类型,但是一旦调用 CreateEngine,就会引发链接器错误:

Engine.h 像这样定义 CreateEngine:

STDAPI 是通常的宏:

有任何想法吗?

0 投票
1 回答
579 浏览

multithreading - 为什么线程池工作项在 UI 线程上执行?

尽管循环应该在单独的线程中运行,但在 Windows 应用商店应用程序中运行的以下代码会阻止 UI 30 秒:

当我在标记的行中设置断点时,我可以看到第 1 行在第 2 行之前被击中,然后是第 3 行和 30 秒后第 4 行。在这 30 秒内,UI 被阻止并且 Visual Studio 中的线程视图显示相同的线程(SHcore.dll) 用于所有断点。我正在使用 Windows 8 和 Visual Studio 2012。有人可以解释一下吗?

0 投票
1 回答
1020 浏览

com - 使用 Windows 运行时模板库 (WRL) 的进程外经典 COM EXE

我已经按照此处的示例:http: //msdn.microsoft.com/en-us/library/vstudio/jj822931.aspx使用 Windows 运行时模板库 (WRL) 创建了一个进程内经典 COM DLL。我还可以修改代码以将 DLL 作为 COM 代理运行(包装在 DllHost.exe 中)。

但是,我找不到使用 WRL 创建进程外 COM EXE 的方法。这里有一个使用准系统 COM API 的简单示例:http: //www.codeproject.com/Articles/3173/A-simple-yet-debuggable-COM-skeleton-code,但我想知道如何利用WRL 来简化它。

谢谢。

0 投票
1 回答
1004 浏览

com - 我没有包含 wrl.h 头文件,但为什么我可以使用命名空间 Microsoft::WRL

在这个 cpp 文件中,我只包含这些头文件

wrl.h 在哪里?或者有这个选项吗?

0 投票
0 回答
975 浏览

c++ - WinRT WRL WinRtClassicComMix 和 IAsyncOperation 失败

我有一个 C++ WinRT 组件,它是一个 WinRtClassicComMix。我想定义一个方法,该方法通过 IAsyncOperation 将自定义类返回到调用 C# 或 WinJS 代码。当使用没有返回值的 IAsyncAction 时一切正常,但是使用带有自动返回值的 PPL 的 create_async 会使 VS 2012 和 VS 2013 编译器崩溃。

相关细节:

接口和类在 IDL 中定义:

对应的头文件:

和 CPP:

编译失败并导致 VS C++ 编译器崩溃:

错误 1 ​​错误 C1001:编译器发生内部错误。c:\program 文件 (x86)\microsoft visual studio 11.0\vc\include\ppltasks.h 5513 1 MyControl

原因是将 create_async 分配给 asyncOp 自动变量的行。我无法明确定义该变量,因为我无法确定正确的类型。:( 它可能需要是帽子类型,但是 ABI::MyControl::MyComponentColorTable* 不能声明为 ^ 因为它没有定义为 WinRT 类,所以我假设 create_async 在这里根本不能使用,但是如何那么我可以创建并返回我的类型的 WinRT IAsyncOperation 吗?MyComponentColorTable 需要什么才能通过 WinRT 传回?IAvatarComponentColorTable 不能用作返回类型,因为它是 [exclusiveto(AvatarComponentColorTable)]。:(

0 投票
2 回答
789 浏览

c++ - 我可以使用 WRL 编写 COM 服务器吗?

我可以使用 C++ 中的 WRL 库代替 ATL 来编写 COM 组件吗?如果可以,我是否可以在较旧的桌面 Windows 系统(如 Windows XP)上使用它?

我很确定第一个问题的答案是肯定的,因为我在 MSDN 上找到了本教程:

http://msdn.microsoft.com/en-us/library/jj822931.aspx

但是非 Windows 8 系统呢?

0 投票
1 回答
682 浏览

c++ - C ++扩展Windows WRL组件类不起作用

我有一个类ClassA实现接口IFooBar,如下所示

现在我想编写一个ClassB固有ClassA的并覆盖它的RuntimeClassInitialize函数,如下所示:

我创建了一个指向ClassB对象的指针,如下所示:

但这实际上是ClassA's 的RuntimeClassInitialize构造函数。的代码路径永远不会被命中ClassBRuntimeClassInitialize

我想知道这是否是在 WRL 中扩展类的正确方法?我在哪里做错了代码?

0 投票
0 回答
167 浏览

c# - 如何在 C++/WRL 上执行与 C# 异步等待相同的操作

我正在尝试c ++ / WRL,但我没有做基础知识,主要是调用异步函数并获取结果,例如如何获取以下代码返回的IStorageFile:

如何执行filePathStorage IAsyncOperation 对象?我如何在 C++/WRL 中做到这一点?

0 投票
0 回答
150 浏览

windows-runtime - IActivationFactory 可以多次返回同一个实例吗?

在探索 WinRT 时,我对单例进行了实验:通过自己实现 IActivationFactory,我可以“在 ABI 级别”制作单例。工厂每次只返回相同的实例。通过扩展,我的类型对 RoActivateInstance 的任何调用都将返回相同的指针。

奇怪的是,与 .NET 互操作时几乎是透明的:

我对此的解释是,每次实例化都会为 WinRT 对象生成一个新的 RCW。因此,它与单例并不完全相同,但可能足够接近。

我还没有检查过其他语言的预测。

我的意图是将它用于不可变对象,它们甚至可能没有任何构造函数参数。(如果他们这样做,激活工厂将需要保留实例映射。)好处主要是减少了内存占用。

但是我在这里踩危险水域吗?我在 COM/ATL 中看到过类似的结构,但在 WinRT 中呢?

0 投票
1 回答
526 浏览

c++ - 在 Windows 运行时组件中使用 WRL 获取文件夹路径返回空字符串

我目前正在将 Boost 'filesystem' 库移植到 Windows Phone 8.1。通过用其他较新的非禁止函数替换“禁止”的 Win32 API 函数,我成功地移植了大约一半的有问题的函数。

我现在需要处理那些没有替代 Win32 API 的 Boost 函数。基于 Steve Gates 对 WP8.1 的其他 Boost 库的出色移植,在与他的私人交流中,我决定在 Boost 代码中使用 WRL,而不是 C++/CX。

为了学习 WRL 并了解我的方向,我编写了一个最小的 WP8.1 应用程序,该应用程序由一个 C++/CX 客户端应用程序组成,该应用程序调用 Windows 运行时组件,后者是用 C++ 编写的。在运行时组件中,我有一个函数试图确定图片库的文件系统路径。我遇到的问题是我得到的最终路径(即 pszPath)是一个空字符串。

这是运行时组件代码:

在函数结束时,函数 get_Path() 返回一个空字符串。谁能阐明我做错了什么,应该怎么做?

提前致谢!