<?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[Non-ATL COM DLL in Excel nutzen?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>bin neu hier und hoffe, ich bin hier richtig und es kann mir hier jemand bei meinem Problem helfen:</p>
<p>Ich implementiere einen OLE DB Provider, den ich gern in Excel ansprechen würde. Die Bibliothek dafür wird ohne ATL kompiliert, da sie auf einem Beispielprojekt basiert, das ebenfalls komplett ohne ATL entwickelt wurde. Versuche ich nun, jene DLL im VBA von Excel als Verweis einzutragen, erhalte ich lediglich die Fehlermeldung, der Verweis auf die angegebene Datei könne nicht hinzugefügt werden.</p>
<p>Füge ich die zur DLL zugehörige TLB als Verweis hinzu, akzeptiert VBA dies, liefert mir auch die von mir in der IDL defininierten Schnittstellen, Klassen und Methoden. Aber ich kann sie nicht aufrufen. Erstellen eines Objektes einer der exportierten Klassen funktioniert noch. Aber der Aufruf einer Methode des Objektes führt zum Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt. Mein VBA Code sieht so aus:</p>
<pre><code>Sub test()
  Dim a As CCommand
  a.FInit
End Sub
</code></pre>
<p>Wobei CCommand eine der exportierten Klassen ist (gehört zum OLD DB Provider) und FInit eine der Methoden der Klasse CCommand.</p>
<p>Was muss ich mit einem reinen DLL Projekt (ohne MFC, ATL etc.) noch anstellen, um es in VBA nutzen zu können?</p>
<p>Danke!</p>
<p>Grüße,<br />
Hendrik</p>
<p>EDIT: Zu spezifisch die Frage??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185857/non-atl-com-dll-in-excel-nutzen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 15:28:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185857.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Jul 2007 09:11:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Non-ATL COM DLL in Excel nutzen? on Mon, 02 Jul 2007 13:00:03 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>bin neu hier und hoffe, ich bin hier richtig und es kann mir hier jemand bei meinem Problem helfen:</p>
<p>Ich implementiere einen OLE DB Provider, den ich gern in Excel ansprechen würde. Die Bibliothek dafür wird ohne ATL kompiliert, da sie auf einem Beispielprojekt basiert, das ebenfalls komplett ohne ATL entwickelt wurde. Versuche ich nun, jene DLL im VBA von Excel als Verweis einzutragen, erhalte ich lediglich die Fehlermeldung, der Verweis auf die angegebene Datei könne nicht hinzugefügt werden.</p>
<p>Füge ich die zur DLL zugehörige TLB als Verweis hinzu, akzeptiert VBA dies, liefert mir auch die von mir in der IDL defininierten Schnittstellen, Klassen und Methoden. Aber ich kann sie nicht aufrufen. Erstellen eines Objektes einer der exportierten Klassen funktioniert noch. Aber der Aufruf einer Methode des Objektes führt zum Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt. Mein VBA Code sieht so aus:</p>
<pre><code>Sub test()
  Dim a As CCommand
  a.FInit
End Sub
</code></pre>
<p>Wobei CCommand eine der exportierten Klassen ist (gehört zum OLD DB Provider) und FInit eine der Methoden der Klasse CCommand.</p>
<p>Was muss ich mit einem reinen DLL Projekt (ohne MFC, ATL etc.) noch anstellen, um es in VBA nutzen zu können?</p>
<p>Danke!</p>
<p>Grüße,<br />
Hendrik</p>
<p>EDIT: Zu spezifisch die Frage??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316648</guid><dc:creator><![CDATA[SeveQ]]></dc:creator><pubDate>Mon, 02 Jul 2007 13:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Non-ATL COM DLL in Excel nutzen? on Tue, 03 Jul 2007 20:11:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Das erste was ich bei einer &quot;selbstgestrickten&quot; COM-Dll testen würde wäre:</p>
<p>- Hast du sichergestellt, dass die DLL korrekt registriert ist (sprich von ProgID über InprocServer32 bis CLSIDs und IIDs etc....) alles samt Pfaden und GUIDs in der Registry steht wo es soll?</p>
<p>- die DLL die ClassFactory und IDispatch Schnittstelle korrekt implementiert?</p>
<p>- Die notwendigen COM Funktionen von RegisterServer bis DllCanUnloadNow etc. von der DLL exportiert werden?</p>
<p>- Die Aufrufkonventionen der exporierten Funktionen korrekt sind?</p>
<p>- Die tlb scheint ja korrekt zu sein, solltest den MIDL Code und die generierten Dateien aber trotzdem mal im Detail checken, (nur wenn alles andere richtig sein sollte ...)</p>
<p>Wenn alles richtig ist, solltest Du mal eine Debugversion der Dll erstellen und checken, ob z.B. die Dll überhaupt geladen wird, ob die exportierten Funktionen aufgerufen werden etc., evtl. macht Excel hier auch ein paar unkonventionelle Aufrufe mit der Dll ... wäre nicht der erste Fall.</p>
<p>p.s. es gibt gute Tutorials für sowas im Netz, mehr würde hier jeden Rahmen sprengen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317747</guid><dc:creator><![CDATA[HalloWelt]]></dc:creator><pubDate>Tue, 03 Jul 2007 20:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to Non-ATL COM DLL in Excel nutzen? on Tue, 03 Jul 2007 20:15:24 GMT]]></title><description><![CDATA[<p>Sorry ich seh gerade, dass CCommand eine Klasse ist ...</p>
<p>Mann, das kann nicht gehen! Du bist in VB und das kennt keine C++Klassen und C++Aufrufkonventionen, geschweige denn kannst Du eine Klasse per COM exportieren.</p>
<p>COM geht ausschließlich über Schnittstellen, besorg Dir erstmal ein Tutorial bevor Du eine eigene COM-Dll schreibst.</p>
<p>Viel Erfolg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317752</guid><dc:creator><![CDATA[HalloWelt]]></dc:creator><pubDate>Tue, 03 Jul 2007 20:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to Non-ATL COM DLL in Excel nutzen? on Tue, 03 Jul 2007 23:51:57 GMT]]></title><description><![CDATA[<p>Äh.<br />
&quot;Dim&quot; erstellt doch noch kein Objekt, bloss eine Referenz... zzz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317837</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 03 Jul 2007 23:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Non-ATL COM DLL in Excel nutzen? on Wed, 04 Jul 2007 07:27:17 GMT]]></title><description><![CDATA[<p>Sorry, ich komme aus der .NET Schiene, und dort ist das alles sehr viel einfacher.</p>
<p>Die Exports sind alle soweit in Ordnung. Irgendwie muss VBA aber dennoch in der Lage sein, mit den Klassen von C++ umzugehen, da ich ja per Dim eine Referenz auf solch ein Objekt anlegen kann. Das funktioniert ja nicht nur mit der selbstimplementierten Klasse, sondern auch mit anderen Klassen aus DLLs. Die Dinger sind ja als Co-Class über die IDL exportiert.</p>
<p>Deswegen... es wundert mich, daß die TLB funktioniert (zumindest für Intellisense und den Objectbrowser in VBA), die DLL aber nicht. Woran kann das noch liegen?</p>
<p>Die Klassensammlung die hier für VBA zugreifbar gemacht werden soll, stammt aus einem Beispielprojekt für einen OLE DB Provider. Sie ist nicht selbstimplementiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317937</guid><dc:creator><![CDATA[SeveQ]]></dc:creator><pubDate>Wed, 04 Jul 2007 07:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to Non-ATL COM DLL in Excel nutzen? on Wed, 04 Jul 2007 13:37:03 GMT]]></title><description><![CDATA[<p>Nochmal: es funktioniert nicht weil du mit &quot;Dim bla as blubb&quot; bloss eine Referenz anlegst, aber noch kein Objekt. Du musst noch irgendwoher dein Objekt bekommen - eben irgendwas ala &quot;Set bla = New blubb&quot; oder so ähnlich machen.<br />
Ist in C# oder VB .NET auch nicht anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318253</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 04 Jul 2007 13:37:03 GMT</pubDate></item></channel></rss>