D支持COM

维基百科说:“在Microsoft Windows上,D可以访问COM(组件对象模型)代码。”

D中对COM有什么样的支持? 它是否比在C ++中使用COM更简单 我在D页上find了这个链接 ,但并没有告诉我太多。

Juno有一个新的版本.5.1,它有很多伟大的连接到Word,Excel,FrameMaker,Trados等的方法,所以它是可能的,也是容易的。 像这样的东西:

scope word = new DispatchObject("Word.Application"); scope wDocs = word.get("Documents"); char[] dd = dir ~ r"\"; char[][] docs = GetFilesFromDir(dir ~ r"\", "*." ~ fromType, true); if (docs.length == 0) { info.text = "Did not find any " ~ std.string.toupper(fromType) ~ " files in the directory... \n\nExiting..."; return; } foreach(char[] d; docs) { scope wDoc = wDocs.call("Open", d);//"Normal", false, 0); char[] txt = std.path.getName(d); // original file ie. test if it was test.doc txt ~= ".doc"; if (std.file.exists(txt)) std.file.remove(txt); wDoc.call("SaveAs", txt, // FileName 0, // FileFormat wdFormatDOC = 0 false, // LockComments "", // Password false, // AddToRecentFiles "", // WritePassword false, // ReadOnlyRecommended false, // EmbedTrueTypeFonts false, // SaveNativePictureFormat false, // SaveFormsData false, // SaveAsAOCELetter 65001, // Encoding 65001 is UTF8 false, // InsertLineBreaks false, // AllowSubstitutions 0 // LineEnding Const wdCRLF = 0 ); wDoc.call("Close"); } word.call("Quit"); 

由John Chapman编写的Juno lib包含COM支持模块。 不幸的是没有最新的编译器。

http://www.dsource.org/projects/juno/wiki/ComProgramming/“Juno COM”

应该是旁边的phobos的一部分。

对Hannes J.使用auto而不是delphi的var

//创建一个IXMLDOMDocument3的实例。

auto doc = DOMDocument60.coCreate!(IXMLDOMDocument3); 范围(退出)doc.Release();

//创建一个事件提供者实例。

auto events = new EventProvider!(XMLDOMDocumentEvents)(doc); 范围(退出)events.Release();

events.bind(“onReadyStateChange”,{writefln(“state changed”);}); events.bind(“onDataAvailable”,{writefln(“data available”);});

//告诉文档异步加载。

doc.put_async(com_true);

//加载XML文档。

com_bool结果; doc.load(“books.xml”.toVariant(true),result);

http://www.digitalmars.com/d/2.0/interface.html#COM-Interfaces

我知道这是一个地方,但我花了一段时间才找到它。 基本上D中的COM支持是接口之上的黑客攻击。 显然,编译器知道它们,并以几个小方法将它们视为“特殊”,所以一切正常。 顺便说一句,我以为COM死了。