D對COM的支持
回答
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");
http://www.digitalmars.com/d/2.0/interface.html#COM-Interfaces
我知道這是什麼地方,但我花了一段時間來找到它。基本上,D中的COM支持是接口之上的黑客攻擊。顯然,編譯器知道它們,並以幾種小方法將它們視爲「特殊」,所以一切正常。順便說一句,我以爲COM死了。
COM絕對沒有死,Windows Vista和7中的一些新功能只能通過它訪問。我在這裏[url] http://lists.puremagic.com/pipermail/digitalmars-d-dwt/2010-June/001923.html]發佈了一個示例[url] – torhu 2010-09-14 00:59:55
[正確的鏈接](http:// lists。 puremagic.com/pipermail/digitalmars-d-dwt/2010-June/001923.html) – torhu 2010-09-14 01:07:04
大量的Windows代碼使用COM,所以它不可能很快就會死掉。 – casablanca 2010-09-15 02:05:09
John Chapman編寫的Juno lib包含COM支持模塊。不幸的是沒有及時更新最新的編譯器。
http://www.dsource.org/projects/juno/wiki/ComProgramming/ 「朱諾COM」
應該是火衛一的一部分,旁邊。
要漢納斯J.使用汽車,而不是德爾福的無功
//創建IXMLDOMDocument3的一個實例。
auto doc = DOMDocument60.coCreate!(IXMLDOMDocument3); 範圍(退出)doc.Release();
//創建一個事件提供者實例。
auto events = new EventProvider!(XMLDOMDocumentEvents)(doc); scope(exit)events.Release();
events.bind(「onReadyStateChange」,{ writefln(「state changed」); }); events.bind(「onDataAvailable」,{ writefln(「data available」); });
//指示文檔加載異步。
doc.put_async(com_true);
//加載XML文檔。
com_bool result; doc.load(「books.xml」.toVariant(true),result);
啊如果我理解正確,那麼汽車是我正在尋找的東西。謝謝:-) – 2010-09-17 08:58:19
嗯,它似乎自動提供只是類型推斷,而不是後期綁定呢? – 2010-09-17 09:20:25
- 1. BusinessObjects XI COM支持
- 2. D如何支持64位?
- 3. COM多線程支持
- 4. D中的OpenGL 3/4支持
- 5. iOS上D支持的狀態
- 6. 支持COM的.NET用戶控件
- 7. Google地圖不支持.ch或.de,但支持.com。
- 8. D是否支持文檔生成?
- 9. E語言支持D語言
- 10. C++支持Unicode&而不COM註冊
- 11. 實體框架支持COM +交易?
- 12. COM如何支持可選參數?
- 13. COM/Interop - 支持多種版本
- 14. LibreOffice/OpenOffice是否支持COM模型
- 15. OneNote COM接口 - 墨水支持
- 16. SMTP認證()命令不支持smtp.office365.com
- 17. CSS對齊支持
- 18. 對象不支持
- 19. 不支持對象
- 20. %d:在索引不支持的格式的字符 'O'(0x4f)2
- 21. C#來VB6 COM事件(「對象或類不支持的事件集」)
- 22. 它是否需要編組支持線程模型的COM對象「Both」
- 23. 如何添加對遠程COM +應用程序的打字調用支持
- 24. 對Moover的NCover支持
- 25. 對Internet Explorer的Mediaelement.js支持
- 26. oracle對pro * C++的支持
- 27. Spring對ORM的支持?
- 28. 對Windows的SSH庫支持
- 29. Zend Framework對DynamoDB的支持
- 30. 對AES-NI的Python支持
感謝您的示例代碼。這回答了我的問題,儘管我希望D能像COM那樣支持動態語言,比如支持Delphi的變體支持和C#中的var關鍵字。也許將來呢?我想這似乎是不屬於系統編程語言的東西,但我相信它需要像這樣的實例以及諸如遠程調用之類的實例。考慮到D有垃圾收集之類的東西,這個功能可能適合。有沒有可以投票贊成這樣的論壇? – 2010-09-16 07:57:26
我的理解是var不是C#的變體類型,而是完全像在D中使用auto(type推理)。 D確實有http://digitalmars.com/d/2.0/phobos/std_variant.html – 2010-09-20 23:47:51