【发布时间】:2010-09-13 08:46:37
【问题描述】:
维基百科这样说:“在 Microsoft Windows 上,D 可以访问 COM(组件对象模型)代码。”
D 中提供了什么样的 COM 支持?它是否比在 C++ 中使用 COM 更轻松。我在 D 页找到了this link,但它并没有告诉我太多。
【问题讨论】:
维基百科这样说:“在 Microsoft Windows 上,D 可以访问 COM(组件对象模型)代码。”
D 中提供了什么样的 COM 支持?它是否比在 C++ 中使用 COM 更轻松。我在 D 页找到了this link,但它并没有告诉我太多。
【问题讨论】:
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 库包含 COM 支持模块。不幸的是,没有最新的编译器。
http://www.dsource.org/projects/juno/wiki/ComProgramming/“朱诺通信”
应该是火卫一的一部分,旁边。
致 Hannes J. 使用 auto 而不是 delphi 的 var
// 创建 IXMLDOMDocument3 的实例。
自动文档 = DOMDocument60.coCreate!(IXMLDOMDocument3); 范围(退出) doc.Release();
// 创建一个事件提供者实例。
自动事件 = 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);
【讨论】:
http://www.digitalmars.com/d/2.0/interface.html#COM-Interfaces
我知道这是在某个地方,但我花了一段时间才找到它。基本上,D 中的 COM 支持是对接口的一种破解。显然编译器知道它们,并以一些小的方式将它们视为“特殊”,所以一切正常。顺便说一句,我以为 COM 已经死了。
【讨论】: