【问题标题】:Using keyword in a C++ interface declaration在 C++ 接口声明中使用关键字
【发布时间】:2020-08-11 11:47:48
【问题描述】:

我正在将 Direct2D d2d1_1.h 头文件移植到 Delphi,但我遇到了一个声明。我不太明白(d2d_1.h中的Line 1522):

interface DX_DECLARE_INTERFACE("e8f7fe7a-191c-466d-ad95-975678bda998") ID2D1DeviceContext  : public ID2D1RenderTarget
{
    STDMETHOD(CreateBitmap)(
        D2D1_SIZE_U size,
        _In_opt_ CONST void *sourceData,
        UINT32 pitch,
        _In_ CONST D2D1_BITMAP_PROPERTIES1 *bitmapProperties,
        _COM_Outptr_ ID2D1Bitmap1 **bitmap
        ) PURE;    

    using ID2D1RenderTarget::CreateBitmap;       //<<<<<====== This line

    // More code deleted for simplicity
}; // ID2D1DeviceContext

在Delphi中,接口声明中没有“using”关键字这样的概念。

我的问题是:我应该忽略这一行,因为 C++ 编译器有一些魔力,还是应该复制 ID2D1RenderTarget::CreateBitmap 声明?

IMO 接口实际上是一个指向所有方法的指针数组。所以我想我必须从继承的接口中重现声明,以便他的插槽被占用。

【问题讨论】:

  • 这是 C++ 而不是 C,因此我已经更正了标签。您可以通过网络搜索了解使用方式。请务必注意,该语言是 C++。
  • 感谢@David Heffernan,但问题不在于它在 C++ 中的作用。我在文档中读到了。问题是如何翻译成缺乏使用关键字概念的Delphi。我认为有两种解决方案 - 正如我已经提到的 - 要么忽略该行,要么复制引用的声明。
  • 问题是关于 C++ 代码的含义。当你明白你知道如何翻译到 Delphi 时。

标签: c++ delphi interface


【解决方案1】:

我的问题是:我应该简单地忽略这一行,因为 C 编译器有一些魔力,还是应该重现 ID2D1RenderTarget::CreateBitmap 声明?

using 声明基本上是将在其他地方定义的类型引入当前范围。它的作用是允许写CreateBitmap而不是ID2D1RenderTarget::CreateBitmap

【讨论】:

  • 好的,这是我理解的,没有回答我的问题。我重新制定: using 声明是否在接口的二进制表示形式的指针数组中添加一个条目?为什么有人会从继承的接口中带来声明?它们不是自动可见的吗?这是重载现有声明而不是覆盖它吗?
【解决方案2】:

当从 C++ 移植到 Delphi 时,必须简单地忽略使用“using”关键字声明的方法。

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多