【发布时间】:2013-12-16 17:17:30
【问题描述】:
我们必须处理从一个函数返回 void* 的遗留 C++ API (API A)。 void* 需要传递给我们的 C++ /CX API (API B),以便稍后路由回另一个具有采用 void* 参数的函数的旧版 C++ API (API C)。我们的 API B 永远不会取消对 void* 的引用,它只需要保持一段时间,然后将其原封不动地传递给 API C。
但我们找不到将void* 转换为的正确 WinRT 类型。 API B 需要公开 C++ /CX 方法(因为是接口实现),所以像 void* 这样的原生类型不能成为它的一部分。
是否有用于传输不透明指针/句柄类型的 WinRT 类型?
编辑 - 一些代码让问题更清楚:
我们从这个遗留的 C++ 类中得到一个void*:
namespace A
{
class Source
{
public:
static void* GetVoidPtr();
}
}
我们希望将void* 的 WinRT 表示传递给第二个遗留 C++ 类:
namespace C
{
class Target
{
public:
static void SetVoidPtr(void* ptr);
}
}
在它们之间,我们有 C++ /CX 类 Router,它接收来自 Source 的 void* 和 Receiver,它获取 void* 的 WinRT 表示,因为 Receive 方法必须公开并将其传递给遗留类Target:
namespace B
{
public ref class Router sealed
{
private:
Receiver^ m_receiver;
void Route()
{
auto ptr = SOME_CAST<SOME_TYPE>(A::Source::GetVoidPtr());
...
m_receiver->Receive(ptr);
}
}
public interface class IReceiver
{
void Receive(SOME_TYPE ptr);
}
public ref class Receiver sealed : IReceiver
{
public:
virtual void Receive(SOME_TYPE ptr)
{
C::Target::SetVoidPtr(SOME_CAST<void*>(ptr));
}
}
}
【问题讨论】:
标签: c++ windows-runtime c++-cx