根据__uuidof

时间:2017-07-17 07:26:23

标签: c++ c++11 visual-c++ com

我想设置网络摄像头的属性,比如说“焦点”。通常它看起来像那样(忽略错误处理):

CComPrt<IUnknown> unkn = ...; // doesn't matter how we get that
CComPtr<IAMCameraControl> cameraCtrl;
unkn->QueryInterface(IAMCameraControl, (void**)&cameraCtrl);
cameraCtrl->Set(CameraControl_Zoom, 123, 1);

特定于MS的运算符__uuidof返回“数据类型”,其结果可以存储在IID类型的变量中,如下所示:

IID cameraCtrlType = __uuidof(IAMCameraControl);

我的问题:有没有办法根据IID声明变量?这样的事情:

CComPrt<IUnknown> unkn = ...; // doesn't matter how we get that
CComQIPtr<decltype(reverse_of__uuid(cameraCtrlType))> cameraCtrl(unkn);
cameraCtrl->Set(CameraControl_Zoom, 123, 1);

我在这里寻找非模板解决方案。但是,如果有一种方法可以将IID的语言化,那我就有兴趣看看如何这样做。

据我所知,这是不可能的,至少不能用C ++ 11甚至C ++ 17。但也许某人比我更了解我会证明我错了?

0 个答案:

没有答案