是否可以将常规COM对象与C++/CX";“帽子”;语法? P>由于C++ + CX中的REF类基本上是COM对象,并且可以在没有“HAT”语法的C++中使用,就像常规COM对象一样,我认为对于常规的COM对象,在C++的/CX中使用帽子语法是有意义的。大概是这样的: ::DWriteFactory^h_工厂(参考新::DWriteFactory);

是否可以将常规COM对象与C++/CX";“帽子”;语法? P>由于C++ + CX中的REF类基本上是COM对象,并且可以在没有“HAT”语法的C++中使用,就像常规COM对象一样,我认为对于常规的COM对象,在C++的/CX中使用帽子语法是有意义的。大概是这样的: ::DWriteFactory^h_工厂(参考新::DWriteFactory);,com,windows-runtime,windows-10,visual-studio-2017,c++-cx,Com,Windows Runtime,Windows 10,Visual Studio 2017,C++ Cx,然而,这不起作用。据我所知,在C++/CX中可用的WinRT ref类实际上被声明为实际类,从IUnknown开始继承所有相应的COM接口,这些声明包含在.winmd元数据文件中。我想知道是否有可能编写一些额外的声明,使常规COM对象可以使用C++/CX语法(而不将它们转换为WinRT组件),就像它们有允许常规Javascript代码在Typescript中使用的打字一样。可能会有很长的路要走。但是DWriteFactory()只是一个普通的C函数,与COM没有任何关系,语法无法工作。Direc

然而,这不起作用。据我所知,在C++/CX中可用的WinRT ref类实际上被声明为实际类,从
IUnknown
开始继承所有相应的COM接口,这些声明包含在.winmd元数据文件中。我想知道是否有可能编写一些额外的声明,使常规COM对象可以使用C++/CX语法(而不将它们转换为WinRT组件),就像它们有允许常规Javascript代码在Typescript中使用的打字一样。

可能会有很长的路要走。但是DWriteFactory()只是一个普通的C函数,与COM没有任何关系,语法无法工作。DirectWrite与COM的区别就像WinRT与COM的区别一样。它们的共同点是使用基于接口的编程范式。如此,如此不同的是令人讨厌的小细节,对象工厂。不小。“代码在哪里”是一个非常重要的问题,DLL地狱和版本控制是一个困难的问题
ref new
自动生成调用RoGetActivationFactory()的代码。失败。你为什么要这样做?就自动资源管理而言,C++/CX'
^
与WRL的
ComPtr
非常相似。因此,在Windows运行时项目中处理COM对象时,只需使用后者即可。使用
^
似乎更简洁。我假设C++/CX还提供了隐式接口查询,因此无需为目标类型实现的每个接口手动发送
ComPtr
变量和调用
QueryInterface
(或
ComPtr::As
)(就像这些接口没有形成继承链时经常发生的情况一样)。如果无法使用
ref new
语法构造^items,则可以通过某种方式将构造对象的指针投射到^item。本质上,您希望牺牲简洁性来获得更紧凑的代码。我建议不要这样做。对象句柄操作符(
^
)向读卡器传递有自动生成的代码。
ComPtr的情况并非如此。使后者看起来像前者可以消除一个有用的提示。不同的东西看起来应该不同。如果您需要一种更简洁的方式来表达ComPtr::As
,您可以将其封装在自己喜欢的函数模板中。我希望用自动生成的代码来取代手工编写的COM样板。我不认为有什么方法可以使
ComPtr::As
更紧凑(它相当紧凑),因为它需要生成一个新变量;事实上,我希望它完全消失。可以走很长的路。但是DWriteFactory()只是一个普通的C函数,与COM没有任何关系,语法无法工作。DirectWrite与COM的区别就像WinRT与COM的区别一样。它们的共同点是使用基于接口的编程范式。如此,如此不同的是令人讨厌的小细节,对象工厂。不小。“代码在哪里”是一个非常重要的问题,DLL地狱和版本控制是一个困难的问题
ref new
自动生成调用RoGetActivationFactory()的代码。失败。你为什么要这样做?就自动资源管理而言,C++/CX'
^
与WRL的
ComPtr
非常相似。因此,在Windows运行时项目中处理COM对象时,只需使用后者即可。使用
^
似乎更简洁。我假设C++/CX还提供了隐式接口查询,因此无需为目标类型实现的每个接口手动发送
ComPtr
变量和调用
QueryInterface
(或
ComPtr::As
)(就像这些接口没有形成继承链时经常发生的情况一样)。如果无法使用
ref new
语法构造^items,则可以通过某种方式将构造对象的指针投射到^item。本质上,您希望牺牲简洁性来获得更紧凑的代码。我建议不要这样做。对象句柄操作符(
^
)向读卡器传递有自动生成的代码。
ComPtr的情况并非如此。使后者看起来像前者可以消除一个有用的提示。不同的东西看起来应该不同。如果您需要一种更简洁的方式来表达ComPtr::As
,您可以将其封装在自己喜欢的函数模板中。我希望用自动生成的代码来取代手工编写的COM样板。我不认为有什么方法可以使
ComPtr::As
更紧凑(它相当紧凑),因为它需要生成一个新变量;事实上,我希望它完全消失。