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

查看完整版本: D programming language类型库导入工具tlbimpd的使用教程

yidabu 2007-7-9 16:26

D programming language类型库导入工具tlbimpd的使用教程

D programming language类型库导入工具tlbimpd的使用教程知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070709点击下面网址查看原文:http://www.d-programming-language-china.org        本文代码 yidabu 在DMD1.018上测试通过。D programming language type library importer 下载        juno库对com进行了很好的封装。如果要用D语言进行com相关开发,目前来说juno库是不二选择。        首先到juno的主页下载juno        http://www.dsource.org/projects/juno        并按照D语言论坛 http://www.d-programming-language-china.org 文章介绍修改juno以通过新版DMD的编译。编译得到juno.lib        再下载type library importe(tlpimpd),放到系统环境变量设置的路径中去。type library importer tlbimpd 实例1        尝试编译下面的例子:        http://www.dsource.org/projects/juno/wiki/TypeLibraryImporterTips( 本文出处: http://www.d-programming-language-china.org )        首先用下面命令生成导入库:        tlbimpd.exe scrrun.dll /comments        得到模块scripting.d        [Copy to clipboard] [ - ]CODE:                                import std.stdio : writef, writefln;                import juno.com.core;                pragma(lib,"juno.lib");                                import scripting;                /* scripting.d was generated by running a patched version of tlbimpd on                    Microsoft Scripting Runtime (scrrun.dll) */                void main()                {                    IFileSystem3 objFSO = FileSystemObject.coCreate!(IFileSystem3);                    ITextStream objOutFile;                    int hresult;                    wchar* fileName = utf8ToBstr("test_scripting.txt");                    hresult = objFSO.CreateTextFile(                     fileName,                     VARIANT_TRUE,                     VARIANT_FALSE,                     objOutFile);                    freeBstr(fileName);                    wchar* str = utf8ToBstr("testing 1, 2, 3...");                    objOutFile.WriteLine(str);                    objOutFile.Close();                    freeBstr(str);                    writefln("Test succeeded");                    objOutFile.Release();                    objFSO.Release();                }        type library importer tlbimpd 实例2        IE的例子        生成导入库:        tlbimpd.exe msscript.ocx /comments        创建IE的例子:        http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&message_id=52648&attachment_id=1        [Copy to clipboard] [ - ]CODE:                                import std.stdio : writef, writefln;                import juno.com.core;                import msscriptcontrol;                pragma(lib,"juno.lib");                                void main()                {                    IScriptControl objScript = ScriptControl.coCreate!(IScriptControl);                    objScript.set_Language(utf8ToBstr("VBScript"));                    wchar* lang;                    objScript.get_Language(lang);                    writefln(bstrToUtf8(lang));                    objScript.ExecuteStatement(utf8ToBstr(`                    MsgBox "Get ready for Internet Explorer!"                    Dim ieApp                    Set ieApp = CreateObject("InternetExplorer.Application")                    ieApp.Navigate("http://www.d-programming-language.org/")                    ieApp.Visible = True                    MsgBox "Yay for Juno!"                    ieApp.Visible = False                    Set ieApp = Nothing                    `));                }        type library importer tlbimpd 实例3        http://www.dsource.org/projects/juno/wiki/Tutorials/Automation        [Copy to clipboard] [ - ]CODE:                                import juno.io.core, juno.com.core, shell32;                pragma(lib,"juno.lib");                void main() {                    IShellDispatch shell = Shell.coCreate!(IShellDispatch);                    releaseAfter (shell, {                    // Get a reference to the Desktop folder.                    Folder folder;                    shell.NameSpace(toVariant(ShellSpecialFolderConstants.ssfDESKTOP), folder);                    if (folder !is null) {                        releaseAfter (folder, {                                        // Get the collection of FolderItem objects.                        FolderItems items;                        folder.Items(items);                        if (items !is null) {                            releaseAfter (items, {                                            // Iterate through all the FolderItem objects.                            int count;                            items.get_Count(count);                            for (int i = 0; i < count; i++) {                                FolderItem item;                                items.Item(toVariant(i), item);                                if (item !is null) {                                releaseAfter (item, {                                    // Get the name of the item.                                    wchar* bstrName;                                    item.get_Name(bstrName);                                                    // Convert the BSTR to a UTF-8 string. bstrToUtf8 frees the BSTR.                                    char[] name = bstrToUtf8(bstrName);                                    // Display the result.                                    Console.writeln(name);                                });                                }                            }                            });                        }                        });                    }                    });                }        ( lastupdate:20070709 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台

panlw 2007-10-23 20:33

我试了一下,用的是DMD v1.015,但是链接失败。
E:\dev\lang\d\src>tlbimpd.exe msscript.ocx /comments
E:\dev\lang\d\src>dmd msscript_test.d -I..\lib
E:\dev\lang\d\dmd\bin\..\..\dm\bin\link.exe msscript_test,,,user32+kernel32/noi;

OPTLINK (R) for Win32  Release 8.00.1
Copyright (C) Digital Mars 1989-2004  All rights reserved.
msscript_test.obj(msscript_test)
Error 42: Symbol Undefined _D15msscriptcontrol13ScriptControl5CLSIDS4juno3com4c
ore4GUID
msscript_test.obj(msscript_test)
Error 42: Symbol Undefined __D15msscriptcontrol14IScriptControl3IIDS4juno3com4c
ore4GUID
--- errorlevel 2

不知道发什么原因。

yidabu 2007-10-24 07:36

示例代码可能要适当修改才能适应DMD和tlbimpd的版本。
页: [1]
查看完整版本: D programming language类型库导入工具tlbimpd的使用教程