zoukankan      html  css  js  c++  java
  • D语言中使用extern(Windows)类重载Object方法时的问题

           使用D语言已经有快20天了,已经完成项目需要的基本功能,但还需进一步完善。

           最近两三天在DGUI基础上移植了几个Window窗口控件,有TreeList(树+列表视图),DataList(数据列表),MdiFrom(多窗口),IEWebBrowser(IE浏览器),SciEditor(Sci源代码编辑器),DockPanel(notpad的Docking插件),SysHeader(表头控件),

    SysLink等几个标准Windows控件。

           感谢DGUI的作者,对Windows控件做的布局管理及封装,真是特别的优秀。

           在使用Windows接口时发现一个无法重载的问题. 代码如下:

    import std.stdio;
    import core.sys.windows.unknwn;
    import core.sys.windows.windows;
    class MyClass : IUnknown{
        HRESULT QueryInterface(IID* riid, void** pvObject){return 0;}
        ULONG AddRef(){return 0;}
        ULONG Release(){return 0;}
        override int opCmp(Object o) {
            return super.opCmp(o);
        }
    }
    int main(string[] argv){
        MyClass my = new MyClass();
        return 0;
    }

          编译时出错错误:

    image

    错误    1    Error: function main.MyClass.opCmp does not override any function, did you mean to override 'object.Object.opCmp'?    D: empConsoleApp8ConsoleApp8main.d    11   

           提示无法重载。

           这是因为当MyClass从IUnknown接口继承后,因为IUnknown为extern(Windows)类型,所以MyClass也为extern(Windows)类型,这时候override int opCmp(Object o)因为符号使用extern(Windows)格式,而无法与Object.opComp方法对应上,从而无法重载。导致编译失败。

           解决这个问题,只需要明确指定opComp方法为extern(D)类型就可以了。如下:

    import std.stdio;
    import core.sys.windows.unknwn;
    import core.sys.windows.windows;
    class MyClass : IUnknown{
        HRESULT QueryInterface(IID* riid, void** pvObject){return 0;}
        ULONG AddRef(){return 0;}
        ULONG Release(){return 0;}
        extern(D) override int opCmp(Object o) {
            return super.opCmp(o);
        }
    }
    int main(string[] argv){
        MyClass my = new MyClass();
        return 0;
    }

             -------------------------------------------------------------------------------------------------------------------

            另外一个需要思考的问题是,D语言中是不能调用C++中的构造函数,要实现可能需要分析C++中的new函数实现C++中的类在D语言中的构造 。

     

    作者:宛宏南

  • 相关阅读:
    ROS 学习遇到的问题记录(持续更新)
    09.07 jQuery 随意整理
    JavaScript 随意整理3
    JavaScript 随意整理2
    css 随意整理 08.08
    html 随意整理
    vue day2
    vue day1
    【copy】必备之常用正则表达式 By 其他博主
    note.js 笔记第二课
  • 原文地址:https://www.cnblogs.com/wanhongnan/p/5810146.html
Copyright © 2011-2022 走看看