D支持COM

时间:2010-09-13 08:46:37

标签: windows com d

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

D中有哪些对COM的支持?它是否比在C ++中使用COM更容易。我在D页面上找到this link,但它并没有告诉我太多。

3 个答案:

答案 0 :(得分:3)

由John Chapman编写的Juno lib包含COM支持模块。遗憾的是,最新的编译器并不是最新的。

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

旁边应该是phobos的一部分。

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

//创建IXMLDOMDocument3的实例。

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

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

auto events = new EventProvider!(XMLDOMDocumentEvents)(doc); scope(exit)events.Release();

events.bind(“onReadyStateChange”,{   writefln(“状态改变”); }); events.bind(“onDataAvailable”,{   writefln(“数据可用”); });

//告诉文档以异步方式加载。

doc.put_async(com_true);

//加载XML文档。

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

答案 1 :(得分:3)

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");

答案 2 :(得分:2)

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

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