我正在将d2d1_1.h头文件移植到Delphi中,并且陷入了接口声明中。在接口声明中,有一些使用实际实现代码重新声明的方法来调用。这是一个示例(我仅显示代码的相关部分):
// d2d1_1.h line 1522
interface DX_DECLARE_INTERFACE("e8f7fe7a-191c-466d-ad95-975678bda998") ID2D1DeviceContext : public ID2D1RenderTarget
{
// d2d1_1.h line 1715
STDMETHOD_(void, SetRenderingControls)(
_In_ CONST D2D1_RENDERING_CONTROLS *renderingControls
) PURE;
// Lot of declarations ommited for simplicity
// d2d1_1.h line 2149
COM_DECLSPEC_NOTHROW
void
SetRenderingControls(
CONST D2D1_RENDERING_CONTROLS &renderingControls
)
{
return SetRenderingControls(&renderingControls);
}
}; // interface ID2D1DeviceContext
我知道该功能的第二个版本只是为了易于编程。实际上,实现给定接口的对象没有该第二版本的代码。在二进制级别的接口中没有插槽(接口被实现为指向方法的指针的数组)。移植到Delphi时,我只能忽略第二个版本。有人可以确认我的分析吗?
最终COM vtable中仅确实存在标记有PURE
(定义为=0
)属性的方法。
其他方法是实用程序方法/包装程序,其中包含只能在C / C ++中使用的C / C ++代码(它们将被编译),因此在使用其他语言(delphi,.NET等)时,请勿声明它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句