接口声明中的C++实现代码



我正在将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时,我可以忽略第二个版本。有人能证实我的分析吗

只有用PURE(定义为=0(属性标记的方法真正存在于最终的COM vtable中。

其他方法是实用程序方法/包装器,其中包含只能在C/C++中使用的C/C++代码(它们将被编译(,因此在使用其他语言(delphi、.NET等(时不能声明它们

我们还在D2D1中对此进行研究,因为例如接口D2D1Svg.ID2D1SvgElement已经声明了大约20个。

您可以在这里关注这些讨论/问题:C头的翻译,在这里:MfPack/D2D1。到目前为止,还没有找到最终的解决方案或确切的原因,为什么会发生这种情况。

最新更新