<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Namen der COM-Befehle von MS Word]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ein wenig ratlos beim Schreiben einer Ansteuerung für Word über die COM-Komponente (Interface IDispatch).</p>
<p>Als Grundlage verwende ich die Wrapperklassen von Microsoft, die es bei Jochen Kalmbach runterzuladen gibt, um den Code zu vereinfachen ( <a href="http://blog.kalmbachnet.de/?postid=63" rel="nofollow">http://blog.kalmbachnet.de/?postid=63</a> ).</p>
<p>Jedoch scheinen die Funktionsaufrufe für Word aus der TypeLibrary (msword.olb) und von Visual Basic nicht gleich der Befehle von der Wrapperklasse zu sein.</p>
<p>Z.B. ist der Befehl fürs Suchen von Wörtern in C++ hier dann &quot;EditFind&quot; und nicht &quot;Selection.Find&quot;, wie es in der Type-Library angegeben ist.</p>
<p>Also statt</p>
<pre><code class="language-cpp">VARAINT vSelection;
Invoke(pdispWord, DISPATCH_METHOD, NULL, NULL, NULL, OLESTR(&quot;Selection&quot;), TEXT(&quot;&quot;), NULL, (VARIANT FAR*)&amp;vSelection);
</code></pre>
<p>funktioniert nur</p>
<pre><code class="language-cpp">BSTR b_searchString = ::SysAllocString(OLESTR(&quot;Wort&quot;));
Invoke(pdispWord, DISPATCH_METHOD, NULL, NULL, NULL, OLESTR(&quot;EditFind&quot;), Text(&quot;s), b_searchString);
</code></pre>
<p>und zwar von dieser Befehlsübersicht: <a href="http://www.wbrnet.info/db/5301.html" rel="nofollow">www.wbrnet.info/db/5301.html</a><br />
Das gleich passierte mir auch mit dem Befehl &quot;FilePrint&quot; aus der Übersicht und dem eigentlichen Befehl &quot;PrintOut&quot; aus der TypeLibrary.</p>
<p>Allerdings fehlen mir die Parameterangaben, was das Implementieren etwas mühselig macht, da ich keine Fehlerausgabe habe.</p>
<p>Hätte jemand eine Idee, wo es eine solche Übersicht gibt bzw. wie ich doch die &quot;echten&quot; Visual-Basic-Befehle aus der Type-Library übernehmen kann oder auch Beispiele dafür?</p>
<p>Viele Grüße,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229903/namen-der-com-befehle-von-ms-word</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 17:19:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229903.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Dec 2008 23:07:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Wed, 17 Dec 2008 23:07:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ein wenig ratlos beim Schreiben einer Ansteuerung für Word über die COM-Komponente (Interface IDispatch).</p>
<p>Als Grundlage verwende ich die Wrapperklassen von Microsoft, die es bei Jochen Kalmbach runterzuladen gibt, um den Code zu vereinfachen ( <a href="http://blog.kalmbachnet.de/?postid=63" rel="nofollow">http://blog.kalmbachnet.de/?postid=63</a> ).</p>
<p>Jedoch scheinen die Funktionsaufrufe für Word aus der TypeLibrary (msword.olb) und von Visual Basic nicht gleich der Befehle von der Wrapperklasse zu sein.</p>
<p>Z.B. ist der Befehl fürs Suchen von Wörtern in C++ hier dann &quot;EditFind&quot; und nicht &quot;Selection.Find&quot;, wie es in der Type-Library angegeben ist.</p>
<p>Also statt</p>
<pre><code class="language-cpp">VARAINT vSelection;
Invoke(pdispWord, DISPATCH_METHOD, NULL, NULL, NULL, OLESTR(&quot;Selection&quot;), TEXT(&quot;&quot;), NULL, (VARIANT FAR*)&amp;vSelection);
</code></pre>
<p>funktioniert nur</p>
<pre><code class="language-cpp">BSTR b_searchString = ::SysAllocString(OLESTR(&quot;Wort&quot;));
Invoke(pdispWord, DISPATCH_METHOD, NULL, NULL, NULL, OLESTR(&quot;EditFind&quot;), Text(&quot;s), b_searchString);
</code></pre>
<p>und zwar von dieser Befehlsübersicht: <a href="http://www.wbrnet.info/db/5301.html" rel="nofollow">www.wbrnet.info/db/5301.html</a><br />
Das gleich passierte mir auch mit dem Befehl &quot;FilePrint&quot; aus der Übersicht und dem eigentlichen Befehl &quot;PrintOut&quot; aus der TypeLibrary.</p>
<p>Allerdings fehlen mir die Parameterangaben, was das Implementieren etwas mühselig macht, da ich keine Fehlerausgabe habe.</p>
<p>Hätte jemand eine Idee, wo es eine solche Übersicht gibt bzw. wie ich doch die &quot;echten&quot; Visual-Basic-Befehle aus der Type-Library übernehmen kann oder auch Beispiele dafür?</p>
<p>Viele Grüße,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632177</guid><dc:creator><![CDATA[Sir_Tobias]]></dc:creator><pubDate>Wed, 17 Dec 2008 23:07:13 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 18 Dec 2008 11:02:54 GMT]]></title><description><![CDATA[<p>Ich glaube Du verwechselst die Dialoge mit den VB Befehlen!<br />
Geh doch in den Makro-Editor von Word.<br />
IMHO findest Du da die identischen Namen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632309</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 18 Dec 2008 11:02:54 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 18 Dec 2008 11:29:51 GMT]]></title><description><![CDATA[<p>Danke schon mal für die Antwort.<br />
Ich glaube, ich habe die falsche Bibliothek verwendet. Und zwar habe ich</p>
<pre><code class="language-cpp">CreateObject(OLESTR(&quot;Word.Basic&quot;), &amp;m_pdispWord);
</code></pre>
<p>statt</p>
<pre><code class="language-cpp">CreateObject(OLESTR(&quot;Word.Application&quot;), &amp;m_pdispWord);
</code></pre>
<p>verwendet.</p>
<p>Eine Frage noch zum Verständnis der Type-Lib:</p>
<p>Wenn ich z.B. eine Word-Instanz sichtbar machen will, habe ich aus der TypeLib den Befehl</p>
<pre><code class="language-cpp">HRESULT Visible([in] VARIANT_BOOL prop);
</code></pre>
<p>.<br />
Wie rufe ich den Befehl dann mit Invoke korrekt auf?<br />
Etwa so?</p>
<pre><code class="language-cpp">Invoke(m_pdispWord, DISPATCH_PROPERTYGET, NULL, NULL, NULL, OLESTR(&quot;Visible&quot;), TEXT(&quot;b&amp;bVisible&quot;), bVisible, NULL)
</code></pre>
<p>.</p>
<p>Leider kriege ich da nur eine schöne Absturzmeldung.</p>
<p>Gruß,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632320</guid><dc:creator><![CDATA[Sir_Tobias]]></dc:creator><pubDate>Thu, 18 Dec 2008 11:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 18 Dec 2008 14:03:48 GMT]]></title><description><![CDATA[<p>Sir_Tobias schrieb:</p>
<blockquote>
<pre><code class="language-cpp">TEXT(&quot;b&amp;bVisible&quot;)
</code></pre>
</blockquote>
<p>Du willst aber *viele* Parameter übergeben! Lies nochmals die Doku zu &quot;Invoke&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632390</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 18 Dec 2008 14:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 18 Dec 2008 14:47:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5675">@Jochen</a>:</p>
<p>Vielen Dank für den Tip, also werden nur die Typen übergeben und nicht die Namen. Also so dann:</p>
<pre><code class="language-cpp">OLESTR(&quot;Visible&quot;), TEXT(&quot;b&quot;), vVisible))
</code></pre>
<p>Was für mich noch nicht ganz klar ist:</p>
<p>Aus der Type-Lib will ich z.B. die Funktion</p>
<pre><code class="language-cpp">HRESULT OpenOld(
                [in] VARIANT* FileName, 
                [in, optional] VARIANT* ConfirmConversions, 
                [in, optional] VARIANT* ReadOnly, 
                [in, optional] VARIANT* AddToRecentFiles, 
                [in, optional] VARIANT* PasswordDocument, 
                [in, optional] VARIANT* PasswordTemplate, 
                [in, optional] VARIANT* Revert, 
                [in, optional] VARIANT* WritePasswordDocument, 
                [in, optional] VARIANT* WritePasswordTemplate, 
                [in, optional] VARIANT* Format, 
                [out, retval] Document** prop);
</code></pre>
<p>verwenden.</p>
<p>1. Wie kann ich die optionalen Parameter auslassen oder müssen immer alle belegt sein?<br />
2. Wenn ich den Rückgabewert, also die Properties des Dokuments speichern möchte, welcher Datentyp ist da zu verwenden. Document** geht ja schlecht?!</p>
<p>Gruß,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632425</guid><dc:creator><![CDATA[Sir_Tobias]]></dc:creator><pubDate>Thu, 18 Dec 2008 14:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 18 Dec 2008 18:30:15 GMT]]></title><description><![CDATA[<p>Sir_Tobias schrieb:</p>
<blockquote>
<p>1. Wie kann ich die optionalen Parameter auslassen oder müssen immer alle belegt sein?</p>
</blockquote>
<p>Bist Du Dir sicher, dass die Parameter jeweils ein &quot;VARIANT*&quot; (mit Stern!) sind? Ich hätte jetzt alle ohne Stern vermutet.<br />
Optionale-Parameter übergibt man in einem Variant mit dem Typ &quot;VT_ERROR&quot; und dem Code &quot;DISP_E_PARAMNOTFOUND&quot;.<br />
Also z.B: so:</p>
<pre><code class="language-cpp">VARIANT m;  // Missing parameter
VariantInit(&amp;m);
V_VT(&amp;m) = VT_ERROR;
V_ERROR(&amp;missing) = DISP_E_PARAMNOTFOUND;
Invoke(m_pdispWord, DISPATCH_METHOD, NULL, NULL, NULL, 
  OLESTR(&quot;OpenOld&quot;), 
  TEXT(&quot;vvvvvvvvvv&amp;D&quot;), 
  vFileName, 
  m, m, m, m, m, m, m, m, m,
  &amp;pDoc,
  NULL)
VariantClear(&amp;m);
</code></pre>
<p>Hab es aber nicht wirklich probiert...</p>
<p>Sir_Tobias schrieb:</p>
<blockquote>
<p>2. Wenn ich den Rückgabewert, also die Properties des Dokuments speichern möchte, welcher Datentyp ist da zu verwenden. Document** geht ja schlecht?!</p>
</blockquote>
<p>IDispatch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632549</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 18 Dec 2008 18:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Fri, 19 Dec 2008 11:31:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für die Tips. Welchen Unterschied macht es eigentlich, den VARIANT-Typ als Safe-Array (&quot;v&quot;) oder gleich den enthaltenden Typ mit anzugeben (&quot;seeee&quot;)?</p>
<p>Wenn der Aufruf nicht klappt, gibt es laut MSDN die Möglichkeit, sich eine Fehlermeldung ausgeben zu lassen, die ich ja folgendermaßen aufrufen kann:</p>
<pre><code class="language-cpp">EXCEPINFO getExcepInfo;
if ((FAILED(Invoke(m_pdispWord, DISPATCH_METHOD, &amp;returnVal, &amp;getExcepInfo, NULL, OLESTR(&quot;OpenOld&quot;), TEXT(&quot;vvvvvvvvvv&amp;D&quot;), 
vFileName, vError, vError, vError, vError, vError, vError, vError, vError, vError, &amp;pDoc))) {
BSTR bstr_Fehler = getExcepInfo.bstrSource;
</code></pre>
<p>Wie kann man diese Fehlermeldung sinnvoll ausgeben lassen?</p>
<p>Gruß,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632802</guid><dc:creator><![CDATA[Sir_Tobias]]></dc:creator><pubDate>Fri, 19 Dec 2008 11:31:21 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Fri, 19 Dec 2008 12:16:01 GMT]]></title><description><![CDATA[<p>Sir_Tobias schrieb:</p>
<blockquote>
<p>vielen Dank für die Tips. Welchen Unterschied macht es eigentlich, den VARIANT-Typ als Safe-Array (&quot;v&quot;) oder gleich den enthaltenden Typ mit anzugeben (&quot;seeee&quot;)?</p>
</blockquote>
<p>Weil es die Schnittstelle so beschriebt. Bitte lies doch mal die Doku wie Jochen es Dir gesagt hat.<br />
Das Problem ist nämlich: Machst Du es richtig funktioniert es, machst Du es falsch geht es nicht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632822</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 19 Dec 2008 12:16:01 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 08 Jan 2009 12:12:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für die ausführliche Hilfe, habe es soweit hinbekommen:</p>
<p>Eine kleine Frage hätte ich allerdings noch:</p>
<p>Ich möchte gerne Konstanten aus der Typelib statt reine Zahlen verwenden, um möglichst die Kompatibilität zwischen den Office-Versionen zu wahren. Z.B. diese hier:</p>
<pre><code class="language-cpp">typedef enum {
    wdFindStop = 0,
    wdFindContinue = 1,
    wdFindAsk = 2
} WdFindWrap;
</code></pre>
<p>Wie greife ich darauf zu? Geht das überhaupt mit Invoke(...)?</p>
<p>Vielen Dank schon mal.</p>
<p>Gruß,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641661</guid><dc:creator><![CDATA[Sir_Tobias]]></dc:creator><pubDate>Thu, 08 Jan 2009 12:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 08 Jan 2009 12:17:25 GMT]]></title><description><![CDATA[<p>Das hat nichts mit Invoke zu tun, sondern dem importieren der TypeLib. Du benötigst die entsprechende Header Datei. Hier werden keine symbolischen Namen übergeben sondenr Zahlen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641666</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 08 Jan 2009 12:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 08 Jan 2009 12:20:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für den Hinweis. Aber wenn ich die Typelib (z.B. msword.olb) direkt importiere, klappt es doch mit anderen Office-Versionen nicht mehr, oder?</p>
<p>Gruß,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641669</guid><dc:creator><![CDATA[Sir_Tobias]]></dc:creator><pubDate>Thu, 08 Jan 2009 12:20:05 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 08 Jan 2009 14:31:29 GMT]]></title><description><![CDATA[<p>Sir_Tobias schrieb:</p>
<blockquote>
<p>vielen Dank für den Hinweis. Aber wenn ich die Typelib (z.B. msword.olb) direkt importiere, klappt es doch mit anderen Office-Versionen nicht mehr, oder?</p>
</blockquote>
<p>Wieso? Du verwendest doch die Wrapper und DispIDS nicht. Du verwendest doch nur die enum's.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641795</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 08 Jan 2009 14:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to Namen der COM-Befehle von MS Word on Thu, 08 Jan 2009 16:16:56 GMT]]></title><description><![CDATA[<p>Importiere doch die TLB _einmal_ und kopiere dir die &quot;versteckten&quot; Dateien und nimm daraus dann die enums <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641898</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 08 Jan 2009 16:16:56 GMT</pubDate></item></channel></rss>