锁定老帖子 主题:D语言,想说爱你不容易
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-28
D语言,想说爱你不容易
我想在一个GUI中嵌入IE,用来显示HTML,CSS,进行DOM操作。这在脚本语言中,只要类似下面一行代码就能创建一个IE实例: CreateObject("InternetExplorer.Application") 但在D里却这么难。 1 首先我看到juno这个项目好像可以创建COM,可惜很长时间不更新了,已经不能通过新版DMD编译。。。 2 qiezi大侠写过一篇文章 D语言调用ActiveX(在窗口中嵌入ActiveX)
7 现在初浅的了解: 效率低点没有关系,谁能给个例子,用IDispatch接口实现创建IE实例? 第一次用D写程序就被卡住了。。。 20070429tuja补充: 1 Unzip ZIP in \dmd\src\core32 然后用qiezi提供的编译参数: 我的目的是,把IE嵌入GUI,进行DOM操作。 非常感谢qiezi及各位的指教。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-28
/*
Opens an Internet Explorer window using Juno (oldrev's modified version) and the Microsoft Script Control. Written by jcc7 (technocrat7[AT-SIGN]gmail<dot>com) */ import std.stdio : writef, writefln; import combase /+juno.com.core+/ : utf8ToBstr, bstrToUtf8; import msscriptcontrol; /* msscriptcontrol.d was generated by running a patched version of tlbimpd on Microsoft Script Control 1.0 (msscript.ocx) */ 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 `)); } |
|
返回顶楼 | |
发表时间:2007-04-28
呵呵, jcc7 给的这个例子是用VB脚本创建IE,不是 D
|
|
返回顶楼 | |
发表时间:2007-04-28
D用COM很难的原因是COM本身就很复杂,脚本语言掩盖了COM复杂性,现在在D里使用COM几乎是原始的API方式,原因是D没有相应的类库来封装COM。
我看当前D的发展阶段类似于90年左右的C++。 |
|
返回顶楼 | |
发表时间:2007-04-28
用D真苦啊,第一个程序就卡住了。。。
我是不是去学c++呢,C++的实例代码很多 to oldrev: jcc7 说你修改的Juno com很cool! By the way, that update of Juno's COM module seems pretty cool. I hope the Juno project catches up to DMD 1.00, but in the meantime it looks like I can use oldrev's modified version to proceed with some experiments that I had been working on a few months ago. |
|
返回顶楼 | |
发表时间:2007-04-28
学C把,C++确实很难,等掌握了C再学不迟,或者到那时你已经决定投身C#/Java了
|
|
返回顶楼 | |
发表时间:2007-04-28
用IDispatch比较麻烦,是因为静态类型语言一般不使用这个接口,而是直接使用静态接口,有了接口定义的话,做起来比较简单,手工转几个需要的接口也行,本来是很简单的事,问题的根本在于你不自己去做,而别人又不一定有兴趣。写一个IDispatch涉及到相关的一些包装类,数目不大清楚,但应该可以在一天内完成,目前真抽不出时间,五一期间看看吧。我只是不想同时做几个项目,最近也累得慌。
jcc7这个例子是使用D调用VBScript引擎,取巧的做法。。 |
|
返回顶楼 | |
发表时间:2007-04-28
圈子共享里我上传了我修改过的core32,库编译出来了,activex里面的例子编译时有个错误我排除不了:
E:\core32\ax>build ie.d win32.lib -I..\core32 -LIBPATH=..\core32\win32 -cleanup E:\core32\core32\win32\com\OAIDL.d: module win32.com.OAIDL is in multiple packages win32.com.OAIDL 有兴趣的接着做吧。。。 |
|
返回顶楼 | |
发表时间:2007-04-28
OK了,大概是build或者是其它问题,我已经编译成功了ie.d,它可以成功启动IE浏览器。
E:\core32\activex>dmd ie.d -I..\core32 activex.d ..\core32\win32\win32.lib e:\dmd\bin\..\..\dm\bin\link.exe ie+activex,,,..\core32\win32\win32.lib+user32+kernel32/noi; |
|
返回顶楼 | |
发表时间:2007-04-28
有些例子编译不过,比如scriptcontrol.d和core32_activex.d,我怀疑是DMD的BUG,提示的信息很奇怪。
|
|
返回顶楼 | |