D support pour COM

Wikipedia dit ceci: “Sous Microsoft Windows, D peut accéder au code COM (Component Object Model).”

Quel type de support pour COM est présent dans D? Est-ce que cela rend la vie plus facile que d’utiliser COM en C ++. J’ai trouvé ce lien sur la page D mais ça ne me dit pas grand chose.

Juno a une nouvelle version .5.1 qui offre de nombreuses façons de se connecter à Word, Excel, FrameMaker, Trados, etc. Donc, c’est possible et facile. Quelque chose comme ça:

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

La librairie Juno, écrite par John Chapman, contient des modules de support COM. Malheureusement pas à jour avec le dernier compilateur.

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

Devrait faire partie de phobos, à côté.

Pour Hannes J., utilisez auto au lieu de var de delphi

// Crée une instance de IXMLDOMDocument3.

auto doc = DOMDocument60.coCreate! (IXMLDOMDocument3); scope (exit) doc.Release ();

// Crée une instance de fournisseur d’événements.

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

events.bind (“onReadyStateChange”, {writefln (“state changed”);}); events.bind (“onDataAvailable”, {writefln (“données disponibles”);});

// Indique au document de charger de manière asynchrone.

doc.put_async (com_true);

// Charge le document XML.

résultat com_bool; doc.load (“books.xml” .toVariant (true), résultat);

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

Je savais que c’était quelque part mais cela m’a pris du temps pour le trouver. Fondamentalement, le support COM dans D est un hack sur les interfaces. Apparemment, le compilateur les connaît et les traite comme “spéciales” de quelques petites manières, donc tout fonctionne. BTW, je pensais que COM était mort.