D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: D语言库juno的使用steps of build juno with DMD 1.016

yidabu 2007-6-21 10:47

D语言库juno的使用steps of build juno with DMD 1.016

D语言库juno的使用steps of build juno with DMD 1.016知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070617点击下面网址查看原文:http://www.d-programming-language-china.org        D语言库juno已经7个月没有更新。已经不能通过最新版DMD的编译。        试着修改能否通过DMD1.016的编译。download juno        download juno from:        http://www.dsource.org/projects/juno        put to:\dmd\src\other\juno.compile juno and find errors        use DSSS to compile juno        \dmd\src\other\dsss.conf:        QUOTE:                                [*]                buildflags=-g -O -debug                [juno]                type=library                note:without -O switch, will cause Stack Overflow.        \dmd\src\other\build.bat:        QUOTE:                                dsss build juno                pause        modified files        run build.bat, will cause a lot of errors, fixed errors:( 本文出处: http://www.d-programming-language-china.org )        1 com.reflect.d        line 822,delete override.        line 155,change ref to nref,        in editor scite,search        QUOTE:                                ([^\w])ref                replaced with:        QUOTE:                                \1nref                2 xml.core.d        line,162, changed to:        pcbRead = stream_.readBlock(cast(void*)buffer, cb);        line 163, changed to:        std.c.string.memcpy(pv, cast(void*)buffer, cb);        line,237, changed to:        std.c.string.memcpy(cast(void*)buffer, pv, cb);        line 238, changed to:        pcbWritten = stream_.writeBlock(cast(void*)buffer, cb);        3 com.core.d        line 1623, changed ref to nref,searh and replace in file.        line 1604, changed to:        *ppvObject = cast(void*)(cast(IUnknown)this);        line 1607:        *ppvObject =cast(void*)(cast(T[i])this);        line 1640,1641:        std.gc.removeRange(cast(void*)this);        std.c.stdlib.free(cast(void*)this);        line 554:        v.byref = cast(void*)value,        line 1590:        uint r = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, null, error, 0, buffer.ptr, buffer.length + 1, null);        line 1592:        return juno.base.string.toUtf8(buffer.ptr,0, r - 1);        line,1983:        char[] str = juno.base.string.toUtf8(bstr[0 .. len].ptr);        4 xml.dom.d        juno\xml\dom.d(60):Error: cannot create instance of abstract class XmlCDataSection        I'm no idea of how to modify line 60,62,64,66,68,74,79,81,83,85,87,89,91.        the simple solution is delete all "abstract",maybe some wrong here.( 本文出处: http://www.d-programming-language-china.org )        5 io.core.d        line 22 changed to:        return readBlock(cast(void*)buffer, buffer.length);        line 26:        return writeBlock(cast(void*)buffer, buffer.length);        line 172:        uint len = GetConsoleTitle(buffer.ptr, buffer.length);        6 intl.core.d        line 96 changed to:        int cch = LCIDToLocaleName(culture, buffer.ptr, buffer.length, 0);        line 104:        int cch = DownlevelLCIDToLocaleName(culture, buffer.ptr, buffer.length, 0);        line 265 changed to:        int cch = GetLocaleInfo(culture, field, buffer.ptr, buffer.length);        line 279 changed to:        int cch = GetGeoInfo(geoId, geoType, buffer.ptr, buffer.length, 0);        line 285 changed to:        int cch = GetCalendarInfo(culture, calendar, calType, buffer.ptr, buffer.length, null);        line 326 changed to:        int cch = GetLocaleInfo(culture, field, buffer.ptr, buffer.length);        439,440 changed to:        translated = MultiByteToWideChar(CP_UTF8, 0, pChars, length, result.ptr, cch);        return result.ptr;        line 1591,1600 changed to:        return (juno.base.string.parse!(double)(s));        4109,4110 changed to:        wcscpy(tzi.StandardName.ptr, key.getStringValue("Std").toUTF16z());        wcscpy(tzi.DaylightName.ptr, key.getStringValue("Dlt").toUTF16z());        7 base.win32.d        add import std.windws.charset.        line 994 changed to:        T func = cast(T)GetProcAddress(moduleHandle, std.windows.charset.toMBSz(entryPoint));        line 1012 changed to:        func = cast(T)GetProcAddress(moduleHandle, std.windows.charset.toMBSz(entryPointName));        line 951 changed to        uint r = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, null, error, 0, buffer.ptr, buffer.length + 1, null);        8 utils.registry.d        line 81,82 changed to:        RegQueryValueEx(hkey_, name.toLPStr(), null, type, b.ptr, cb);        char[] result = juno.base.string.toUtf8(b.ptr);        96,97 changed to:        RegQueryValueEx(hkey_, name.toLPStr(), null, type, b.ptr, cb);        return expandEnvironmentVariables(juno.base.string.toUtf8(b.ptr));        line 110 changed to        RegQueryValueEx(hkey_, name.toLPStr(), null, type, b.ptr, cb);        line 120 changed to        result ~= juno.base.string.toUtf8(b[index .. pos].ptr);        line 125 changed to        result ~= juno.base.string.toUtf8(b.ptr,index, end);        line 141 changed to        RegQueryValueEx(hkey_, name.toLPStr(), null, type, b.ptr, cb);        line 189 changed to        RegSetValueEx(hkey_, name.toLPStr(), 0, REG_DWORD, value.ptr, value.length);        218,line 219 changed to        RegEnumKeyEx(hkey_, i, buffer.ptr, len, null, null, null, null);        result[i] = juno.base.string.toUtf8(buffer.ptr);        240,line 241 changed to        RegEnumValue(hkey_, i, buffer.ptr, len, null, null, null, null);        result[i] = juno.base.string.toUtf8(buffer.ptr);        9 io.path.d        151,152 changed to:        GetTempPath(buffer.length, buffer.ptr);        return getFullPath(juno.base.string.toUtf8(buffer.ptr));        158,line 159 changed to        GetTempFileName(path.toLPStr(), "tmp", 0, buffer.ptr);        return juno.base.string.toUtf8(buffer.ptr);        164,line 165 changed to        SHGetFolderPath(Handle.init, cast(int)folder, Handle.init, 0, buffer.ptr);        return juno.base.string.toUtf8(buffer.ptr);        176,178,line 179 changed to        PathCanonicalizeW(buffer.ptr, path.toLPStr());        GetLongPathNameW(buffer.ptr, buffer.ptr, MAX_PATH);        return juno.base.string.toUtf8(buffer.ptr);( 本文出处: http://www.d-programming-language-china.org )        10 intl.format.d        line 479 changed to:        char* p = cast(char*)number.digits;        line 643 changed to        char* p = cast(char*)digits.ptr;        line 915 changed to        char* p = cast(char*)digits.ptr;        line 1035 changed to        char* p = cast(char*)number.digits;        line 1099 changed to        char* p = cast(char*)number.digits;        line 1134 changed to        char* p = cast(char*)number.digits;        11 base.meta.d        line 48 changed to:        const char[] demangleType = newdemangleBasicType(s);        add function(maybe some problem here):        QUOTE:                                char[] newdemangleBasicType(char[] s) {                    if (s == "v") return "void";                    else    if (s == "x") return "bool";                    else    if (s == "g") return "byte";                    else    if (s == "h") return "ubyte";                    else    if (s == "s") return "short";                    else    if (s == "t") return "ushort";                    else    if (s == "i") return "int";                    else    if (s == "k") return "uint";                    else    if (s == "l") return "long";                    else    if (s == "m") return "ulong";                    else    if (s == "d") return "double";                    else    if (s == "f") return "float";                    else    if (s == "e") return "real";                    else    if (s == "o") return "ifloat";                    else    if (s == "p") return "idouble";                    else    if (s == "j") return "ireal";                    else    if (s == "a") return "char";                    else    if (s == "u") return "wchar";                    else    if (s == "w") return "dchar";                    return null;                }                12 com.client.d        line 115 changed to:        dispParams.rgvarg = cast(VARIANT*)varArgs;        13 base.environment.d        line 14 changed to:        uint n = ExpandEnvironmentStrings(temp.toLPStr(), buffer.ptr, c);        line 18 changed to:        n = ExpandEnvironmentStrings(temp.toLPStr(), buffer.ptr, c);        line 22 changed to        int n = ExpandEnvironmentStrings(name.toLPStr(), buffer.ptr, c);        line 26 changed to        n = ExpandEnvironmentStrings(name.toLPStr(), buffer.ptr, c);        line 28 changed to        char[] result = juno.base.string.toUtf8(buffer.ptr);        line 35 changed to        int n = GetEnvironmentVariable(variable.toLPStr(), buffer.ptr, buffer.length);        line 40 changed to        n = GetEnvironmentVariable(variable.toLPStr(), buffer.ptr, buffer.length);        line 42 changed to        char[] result = juno.base.string.toUtf8(buffer.ptr);        14 juno.base.test.d        line 205-208 changed to:        info.webName = juno.base.string.toUtf8(cp.wszWebCharset.ptr);        info.headerName = juno.base.string.toUtf8(cp.wszHeaderCharset.ptr);        info.bodyName = juno.base.string.toUtf8(cp.wszBodyCharset.ptr);        info.description = juno.base.string.toUtf8(cp.wszDescription.ptr);        line 616 changed to:        ConvertINetString(&dwMode, CP_UTF8, codePage_, cast(ubyte*)chars.ptr, &charsLength, bytes.ptr, &bytesLength);        line 630 changed to:        ConvertINetString(&dwMode, codePage_, CP_UTF8, bytes.ptr, &bytesLength, null, &charsLength);        line 633 changed to        ConvertINetString(&dwMode, codePage_, CP_UTF8, bytes.ptr, &bytesLength, cast(ubyte*)chars.ptr, &charsLength);( 本文出处: http://www.d-programming-language-china.org )        run build.bat, build juno.lib sucessed.( 本文出处: http://www.d-programming-language-china.org )example of use juno        save code below to test.d:        [Copy to clipboard] [ - ]CODE:                                //from http://www.dsource.org/projects/juno/wiki/Tutorials/LateBinding                import juno.com.core;                import juno.com.client;                pragma(lib,"juno.lib");                                int main() {                    try                    {                        // Create an instance of the Message object                        scope auto message = new juno.com.client.DispatchObject("CDO.Message");                        printf("auto message \n");                        // Build the mail message                        message.set("Subject", "test juno cdo.message");                        message.set("TextBody", "hello,你好此信是通过d program 发送的. 请参考 http://www.d-programming-language-china.org");                        message.set("From", "www.yidabu.com@gmail.com"); // Replace with your email address                        message.set("To", "bbs.d-programming-language-china.org@gmail.com"); // Replace with the recipient's email address                        // Configure CDOSYS to send via a remote SMTP server                                        scope auto config = new DispatchObject(message.get("Configuration"));                        // Call config's Fields property and get a reference to its Fields instance                        scope auto fields = new DispatchObject(config.get("Fields"));                        // Set the appropriate values                        scope auto sendUsing = new DispatchObject(fields.get("Item",                         "http://schemas.microsoft.com/cdo/configuration/sendusing"));                        sendUsing.set("Value", 2); // cdoSendUsingPort = 2                        scope auto port = new DispatchObject(fields.get("Item",                         "http://schemas.microsoft.com/cdo/configuration/smtpserverport"));                        port.set("Value", 465);                        scope auto server = new DispatchObject(fields.get("Item",                         "http://schemas.microsoft.com/cdo/configuration/smtpserver"));                        server.set("Value", "smtp.gmail.com"); // Replace 'mail.remote.com' with your remote server's address                        // Set the authentication type, user name and password                                        scope auto authentication = new DispatchObject(fields.get("Item",                         "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"));                        authentication.set("Value", 1); // cdoBasic = 1                                        scope auto ssl = new DispatchObject(fields.get("Item","http://schemas.microsoft.com/cdo/configuration/smtpusessl"));                        ssl.set("Value",true);                                        scope auto userName = new DispatchObject(fields.get("Item",                         "http://schemas.microsoft.com/cdo/configuration/sendusername"));                        userName.set("Value", "www.yidabu.com"); // Replace 'username' with your account's user name                        scope auto password = new DispatchObject(fields.get("Item",                         "http://schemas.microsoft.com/cdo/configuration/sendpassword"));                        password.set("Value", "bbs.d-programming-language-china.org"); // Replace 'password' with your account's password                        fields.call("Update");                        message.call("Send");                        printf("send sucessed \n");                    }//try                    catch(Exception e)                    {                        printf("catch %.*s\n",e.msg);                        return 1;                    }                    return 0;                }                build test.d, cause error: not found shlwapi.lib, so:        QUOTE:                                implib /s shlwapi.lib shlwapi.dll                copy shlwapi.lib to \dmd\lib.        build test.d, com.base.stirng.TypeInfo_Aa cause error: com.base.string, commented TypeInfo_Aa, build test.d sucessed, but when run test.exe, will cause unhandled Error: Stack Overflow,( 本文出处: http://www.d-programming-language-china.org )        how to got when and where cause Stack Overflow?        download ddbg from:        http://ddbg.mainia.de/        copy ddbg.exe,ddbg_debug.exe to D:\d\dmd\bin.        commandline:ddbg test.exe        then input:r to run test.exe,prompt:        Unhandled Exception at juno.base.string.ArgumentList.opCall(class TypeInfo[],void*)        I'd no idea to fix this.        my simple solution is cancled "import juno.base.string" in juno.com.core, copy some function from juno.base.string to juno.com.core.( 本文出处: http://www.d-programming-language-china.org )        build test.d, prompt error:Symbol Undefined _SafeArrayGetVartype@8,search msdn, got:        QUOTE:                                HRESULT SafeArrayGetVartype(                    SAFEARRAY *psa,                    VARTYPE *pvt                );                change code below in juno.com.core:        QUOTE:                                int SafeArrayGetVartype(SAFEARRAY* psa, out ushort pvt);                to:        QUOTE:                                int SafeArrayGetVartype(SAFEARRAY* psa, out ushort* pvt);                line 568 changed to:        QUOTE:                                ushort* pvt = &vt;                SafeArrayGetVartype(value, pvt);                changed:        QUOTE:                                struct SAFEARRAYBOUND {                    uint cElements;                    int lLbound;                }                                struct SAFEARRAY {                    ushort cDims;                    ushort fFeatures;                    uint cbElements;                    uint cLocks;                    void* pvData;                    SAFEARRAYBOUND[1] rgsabound;                to:        QUOTE:                                //bbs.d-programming-language-china.org: below from win32.com.OAIDL                struct myIID {    // size is 16                    align(1):                    uint Data1;                    ushort    Data2;                    ushort    Data3;                    byte    Data4[8];                }                                struct    FLAGGED_WORD_BLOB                    {                    uint fFlags;                    uint clSize;                    ushort[1] asData;                    }                alias FLAGGED_WORD_BLOB    *wireBSTR;                struct SAFEARR_BSTR {                    uint Size;                    wireBSTR * aBstr;                }                                //                struct SAFEARR_UNKNOWN {                    uint Size;                    IUnknown * apUnknown;                }                                //                struct SAFEARR_DISPATCH {                    uint Size;                    IDispatch * apDispatch;                }                                //                struct _wireVARIANT {                }                struct _wireBRECORD {                }                // Forward references.                alias _wireVARIANT * wireVARIANT;                alias _wireBRECORD * wireBRECORD;                struct SAFEARR_VARIANT {                    uint Size;                    wireVARIANT * aVariant;                }                                //                struct SAFEARR_BRECORD {                    uint Size;                    wireBRECORD * aRecord;                }                                //                struct SAFEARR_HAVEIID {                    uint Size;                    IUnknown * apUnknown;                    myIID    iid;                }                                //                struct BYTE_SIZEDARR                    {                    uint clSize;                    byte    *pData;                    }    ;                                    //                 struct    WORD_SIZEDARR                    {                    uint clSize;                    ushort *pData;                    }    ;                                    //                struct    DWORD_SIZEDARR                    {                    uint clSize;                    uint * pData;                    }    ;                                    //                struct    HYPER_SIZEDARR                    {                    uint clSize;                    long *pData;                    }                                                                union uSAFEARRAY_UNION {                SAFEARR_BSTR    BstrStr;                SAFEARR_UNKNOWN    UnknownStr;                SAFEARR_DISPATCH DispatchStr;                SAFEARR_VARIANT    VariantStr;                SAFEARR_BRECORD    RecordStr;                SAFEARR_HAVEIID    HaveIidStr;                BYTE_SIZEDARR    ByteStr;                WORD_SIZEDARR    WordStr;                DWORD_SIZEDARR    LongStr;                HYPER_SIZEDARR    HyperStr;                }                                struct SAFEARRAY_UNION {                    uint sfType;                    uSAFEARRAY_UNION u;                }                                alias SAFEARRAY_UNION SAFEARRAYUNION;                                struct SAFEARRAYBOUND {                    uint cElements;                    int lLbound;                }                struct wireSAFEARRAY {                    ushort cDims;                    ushort fFeatures;                    uint    cbElements;                    uint    cLocks;                    SAFEARRAYUNION uArrayStructs;                    SAFEARRAYBOUND[1] rgsabound;                }                alias wireSAFEARRAY SAFEARRAY ;                //bbs.d-programming-language-china.org:above from win32.com.OAIDL                run build.bat:        QUOTE:                                dmd test.d \dmd\src\other\juno\com\core.d \dmd\src\other\juno\com\client.d -g -debug -O -L/exet:nt/su:windows:4.0                prompt:Symbol Undefined _SafeArrayGetVartype@8        search SafeArrayGetVartype in oleaut32.lib, found nothing.        download linkdef from:        http://www.dprogramming.com/linkdef.php        build with:        QUOTE:                                dmd test.d \dmd\src\other\juno\com\core.d \dmd\src\other\juno\com\client.d -g -debug -O -L/exet:nt/su:windows:4.0 | linkdef oleaut32                then:        QUOTE:                                implib safearray.lib oleaut32.def                copy safearray.lib to \d\dm\lib, add code below to juno.com.core:        QUOTE:                                pragma(lib, "safearray.lib");                build test.d, run test.exe, send mail to gmail sucessed.( lastupdate:20070621 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D语言库juno的使用steps of build juno with DMD 1.016