<?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[Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003]]></title><description><![CDATA[<p>Tag zusammen,</p>
<p>ich hoffe ich bin im richtigen Forum gelandet. Bei Bedarf bitte verschieben...wusste nicht ob ins IDE- oder MFC- oder ein sonstiges Forum...</p>
<p>Zu meinem Problem. Ich möchte aus einem eigenen Programm heraus eine Verbindung zum Programm Origin herstellen. Der Hersteller bietet dazu vorgefertigte Klassen an (bzw. ein ganzes Projekt für MSVC6) sowie ein aus diesen Beispiel-Klassen erstelltes Binary.<br />
Das Problem ist nun, dass der Aufbau der Verbindung mit dem Binary problemlos funktioniert. Kompiliere ich den Code aber selbst, tritt ein Fehler auf und die Verbindung kann nicht hergestellt werden.<br />
Ich habe mit fähigen (so schien es mir zumindest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ) Supportarbeitern lange an dem Problem gesessen und viele Fehlerquellen bis auf eine ausgeschlossen: meine IDE. Die Supportmitarbeiter nutzen MSVC6, ich nutze MSVS.NET2003.<br />
Ich habe die Fehlerquelle im Debugger gesucht. Hier etwas Quellcode:</p>
<p>Der Fall bezieht sich hier auf nOption = ALWAYS_CREATE_NEW;<br />
Herzstück der Verbindung ist die Klasse COriginClient. Hier der Konstruktor:</p>
<pre><code class="language-cpp">COriginClient::COriginClient(int nOption)
{
	//Initialize COM
	CoInitialize(NULL);

	//Create instance of Origin
	HRESULT hr = 0;
	switch( nOption )
	{
		case USE_EXIST_FIRST:
			hr = m_pOApp.CreateInstance( __uuidof(ApplicationSI) );
			break;

		case ALWAYS_CREATE_NEW:
		default:
			hr = m_pOApp.CreateInstance( __uuidof(Application) );
			break;
	}
}
</code></pre>
<p>Nach dem Ausführen dieser Zeile</p>
<pre><code class="language-cpp">hr = m_pOApp.CreateInstance( __uuidof(Application) );
</code></pre>
<p>ist der Inhalt von n nicht mehr S_OK, sonder S_NOINTERFACE, was im weiteren Programmverlauf der Grund dafür ist, dass die Verbindung fehlschlägt.</p>
<p>Ich habe tiefer gegraben und die Methode CreateInstance angesehen, die in comip.h definiert ist:</p>
<pre><code class="language-cpp">HRESULT CreateInstance(const CLSID&amp; rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
    {
        HRESULT hr;

        _Release();

        if (dwClsContext &amp; (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
            IUnknown* pIUnknown;
            hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast&lt;void**&gt;(&amp;pIUnknown));

            if (SUCCEEDED(hr)) {
                hr = OleRun(pIUnknown);

                if (SUCCEEDED(hr)) {
					//hier scheint die Wurzel allen Übels zu liegen ;)
                    hr = pIUnknown-&gt;QueryInterface(GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
                }

                pIUnknown-&gt;Release();
            }
        }
        else {
            hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
        }

        if (FAILED(hr)) {
            // just in case refcount = 0 and dtor gets called
            m_pInterface = NULL;
        }

        return hr;
    }
</code></pre>
<p>hr bekommt den Wert S_NOINTERFACE beim Ausführen dieser Zeile zugewiesen:</p>
<pre><code class="language-cpp">hr = pIUnknown-&gt;QueryInterface(GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
</code></pre>
<p>Was sich dort abspielt, sagt mir jedoch absolut gar nichts. Und schon gar nicht sagt mir das, warum es mit MSVC6 funktioniert, und mit MSVS.NET2003 nicht. Wohlgemerkt wird auch bei mir alles fehlerfrei kompiliert, nur die Ausführung ruft dann dieses Resultat hervor...<br />
Also: kann mir jemand sagen, was ich im MSVS.NET2003 ändern muss, damit dieser Fehler nicht mehr auftaucht?</p>
<p>Ich weiß dass das ein sehr spezielles Problem ist und habe es deswegen zuerst beim Origin Support versucht, die sollten ihr Produkt ja kennen. Tun sie auch, aber nicht ihre IDEs <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Von daher hoffe ich auf eure Hilfe. Wenn ihr irgendwelche weiteren Informationen braucht, kann ich die natürlich gern posten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Edit: inzwischen ist mir aufgegangen, dass die Fragestellung mit MFC rein gar nichts zu tun hat, also bitte verschieben? Wäre nett <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202957/programm-läuft-mit-msvc6-aber-nicht-mit-msvs-net2003</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 17:47:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202957.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jan 2008 10:06:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 10:21:00 GMT]]></title><description><![CDATA[<p>Tag zusammen,</p>
<p>ich hoffe ich bin im richtigen Forum gelandet. Bei Bedarf bitte verschieben...wusste nicht ob ins IDE- oder MFC- oder ein sonstiges Forum...</p>
<p>Zu meinem Problem. Ich möchte aus einem eigenen Programm heraus eine Verbindung zum Programm Origin herstellen. Der Hersteller bietet dazu vorgefertigte Klassen an (bzw. ein ganzes Projekt für MSVC6) sowie ein aus diesen Beispiel-Klassen erstelltes Binary.<br />
Das Problem ist nun, dass der Aufbau der Verbindung mit dem Binary problemlos funktioniert. Kompiliere ich den Code aber selbst, tritt ein Fehler auf und die Verbindung kann nicht hergestellt werden.<br />
Ich habe mit fähigen (so schien es mir zumindest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ) Supportarbeitern lange an dem Problem gesessen und viele Fehlerquellen bis auf eine ausgeschlossen: meine IDE. Die Supportmitarbeiter nutzen MSVC6, ich nutze MSVS.NET2003.<br />
Ich habe die Fehlerquelle im Debugger gesucht. Hier etwas Quellcode:</p>
<p>Der Fall bezieht sich hier auf nOption = ALWAYS_CREATE_NEW;<br />
Herzstück der Verbindung ist die Klasse COriginClient. Hier der Konstruktor:</p>
<pre><code class="language-cpp">COriginClient::COriginClient(int nOption)
{
	//Initialize COM
	CoInitialize(NULL);

	//Create instance of Origin
	HRESULT hr = 0;
	switch( nOption )
	{
		case USE_EXIST_FIRST:
			hr = m_pOApp.CreateInstance( __uuidof(ApplicationSI) );
			break;

		case ALWAYS_CREATE_NEW:
		default:
			hr = m_pOApp.CreateInstance( __uuidof(Application) );
			break;
	}
}
</code></pre>
<p>Nach dem Ausführen dieser Zeile</p>
<pre><code class="language-cpp">hr = m_pOApp.CreateInstance( __uuidof(Application) );
</code></pre>
<p>ist der Inhalt von n nicht mehr S_OK, sonder S_NOINTERFACE, was im weiteren Programmverlauf der Grund dafür ist, dass die Verbindung fehlschlägt.</p>
<p>Ich habe tiefer gegraben und die Methode CreateInstance angesehen, die in comip.h definiert ist:</p>
<pre><code class="language-cpp">HRESULT CreateInstance(const CLSID&amp; rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
    {
        HRESULT hr;

        _Release();

        if (dwClsContext &amp; (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
            IUnknown* pIUnknown;
            hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast&lt;void**&gt;(&amp;pIUnknown));

            if (SUCCEEDED(hr)) {
                hr = OleRun(pIUnknown);

                if (SUCCEEDED(hr)) {
					//hier scheint die Wurzel allen Übels zu liegen ;)
                    hr = pIUnknown-&gt;QueryInterface(GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
                }

                pIUnknown-&gt;Release();
            }
        }
        else {
            hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
        }

        if (FAILED(hr)) {
            // just in case refcount = 0 and dtor gets called
            m_pInterface = NULL;
        }

        return hr;
    }
</code></pre>
<p>hr bekommt den Wert S_NOINTERFACE beim Ausführen dieser Zeile zugewiesen:</p>
<pre><code class="language-cpp">hr = pIUnknown-&gt;QueryInterface(GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
</code></pre>
<p>Was sich dort abspielt, sagt mir jedoch absolut gar nichts. Und schon gar nicht sagt mir das, warum es mit MSVC6 funktioniert, und mit MSVS.NET2003 nicht. Wohlgemerkt wird auch bei mir alles fehlerfrei kompiliert, nur die Ausführung ruft dann dieses Resultat hervor...<br />
Also: kann mir jemand sagen, was ich im MSVS.NET2003 ändern muss, damit dieser Fehler nicht mehr auftaucht?</p>
<p>Ich weiß dass das ein sehr spezielles Problem ist und habe es deswegen zuerst beim Origin Support versucht, die sollten ihr Produkt ja kennen. Tun sie auch, aber nicht ihre IDEs <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Von daher hoffe ich auf eure Hilfe. Wenn ihr irgendwelche weiteren Informationen braucht, kann ich die natürlich gern posten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Edit: inzwischen ist mir aufgegangen, dass die Fragestellung mit MFC rein gar nichts zu tun hat, also bitte verschieben? Wäre nett <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438223</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Thu, 17 Jan 2008 10:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 10:29:49 GMT]]></title><description><![CDATA[<p>Was macht denn GetIID()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438240</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Thu, 17 Jan 2008 10:29:49 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 11:30:05 GMT]]></title><description><![CDATA[<p>Hab gleich mal den Anfang der ganzen comip.h eingfügt:</p>
<pre><code class="language-cpp">/***
* comip.h - Native C++ compiler COM support - COM interface pointers header
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
****/

#if _MSC_VER &gt; 1000
#pragma once
#endif

#if !defined(_INC_COMIP)
#define _INC_COMIP

#include &lt;ole2.h&gt;
#include &lt;malloc.h&gt;

#include &lt;comutil.h&gt;

#pragma warning(push)
#pragma warning(disable: 4290)

#pragma push_macro(&quot;new&quot;)
#undef new

#include &lt;new.h&gt;

class _com_error;

void __stdcall _com_issue_error(HRESULT);
struct __declspec(uuid(&quot;00000000-0000-0000-c000-000000000046&quot;)) IUnknown;

// Provide Interface to IID association
//
template&lt;typename _Interface, const IID* _IID /*= &amp;__uuidof(_Interface)*/&gt; 
class _com_IIID {
public:
    typedef _Interface Interface;

    static _Interface* GetInterfacePtr() throw()
    {
        return NULL;
    }

    static _Interface&amp; GetInterface() throw()
    {
        return *GetInterfacePtr();
    }

	// und dann hierhin...
    static const IID&amp; GetIID() throw()
    {
        return *_IID;
    }
};

template&lt;typename _IIID&gt; class _com_ptr_t {
public:
    // Declare interface type so that the type may be available outside
    // the scope of this template.
    //
    typedef _IIID ThisIIID;
    typedef typename _IIID::Interface Interface;

    // When the compiler supports references in template parameters,
    // _CLSID will be changed to a reference.  To avoid conversion
    // difficulties this function should be used to obtain the
    // CLSID.
    //

	// erst springt er hierhin...
    static const IID&amp; GetIID() throw()
    { 
        return ThisIIID::GetIID(); 
    }
	...
</code></pre>
<p>beantwortet das irgendwie deine Frage? Hab leider den Bereich schon verlassen, in dem weiß, was ich tue. Es werden zwei Methoden aufgerufen, ich hab sie im Quelltext mit Kommentaren markiert.</p>
<p>Ich könnt heut abend auch mal die komplette comip.h irgendwo hochladen (sowas wie Anhänge scheints hier nicht zu geben, oder bin ich blind?), wenn das jemandem hilft?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438276</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Thu, 17 Jan 2008 11:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 12:56:01 GMT]]></title><description><![CDATA[<p>Wenn man sich zum Vergleich mal die comip.h vom VC6 anschaut, dann gibt es eigentlich keine Unterschiede:</p>
<pre><code class="language-cpp">// Loads an interface for the provided CLSID.
	// Returns an HRESULT.  Any previous interface is released.
	//
	HRESULT CreateInstance(const CLSID&amp; rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
	{
		HRESULT hr;

		_Release();

		if (dwClsContext &amp; (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
			IUnknown* pIUnknown;

			hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast&lt;void**&gt;(&amp;pIUnknown));

			if (FAILED(hr)) {
				return hr;
			}

			hr = OleRun(pIUnknown);

			if (SUCCEEDED(hr)) {
				hr = pIUnknown-&gt;QueryInterface(GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
			}

			pIUnknown-&gt;Release();
		}
		else {
			hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast&lt;void**&gt;(&amp;m_pInterface));
		}

		return hr;
	}
</code></pre>
<p>Auch GetIID() sieht hier genauso aus.</p>
<p>Wenn Du Zugriff auf einen VC6 hast, dann könntest Du mal versuchen, in beiden IDEs schrittweise durch die Funktionen zu laufen und zu schauen, ob es bei den Argumenten bzw. Rückgabewerten Unterschiede gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438344</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Thu, 17 Jan 2008 12:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 13:33:24 GMT]]></title><description><![CDATA[<p>Schau doch mal im Debugger welchen Wert reinterpret_cast&lt;void**&gt;(&amp;m_pInterface) hat, wenn QueryInterface() betreten wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438371</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Thu, 17 Jan 2008 13:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 13:35:23 GMT]]></title><description><![CDATA[<p>Ich kann m it nicht vorstellen, dass es hier einen Unterschied gibt, außer VC6 ermittelt eine andere Interface-ID als VC2003.</p>
<p>Der Fehler liegt in keinem Fall auf der C++/MFC/ATL Seite. S_NOINTERFCAE bedeutet: Da ist ein COM-Objekt, aberdas Interface, nachdem Du fragst ist nicht vorhanden.<br />
Gib mal die IID direkt an!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438382</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 17 Jan 2008 13:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 13:46:10 GMT]]></title><description><![CDATA[<p>Also an RTTI für reinterpret_cast liegts nicht, das hab ich probiert. &amp;m_pInterface hat den Wert 0x00000000, was Martins Aussage, dass kein Interface vorhanden ist, stützt, vermute ich mal.<br />
GetIID() liefert folgendes:</p>
<pre><code class="language-cpp">GetIID	0x00402190 _com_ptr_t&lt;_com_IIID&lt;OrgApplication::IOApplication,&amp;_GUID_91186b48_39f5_11d3_9367_00c04f79eafe&gt; &gt;::GetIID(void)	const _GUID &amp; (void)
</code></pre>
<p>Nützt euch das was? Wie gesagt ich versteh selbst nicht mehr was ich hier mache... <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>
<p>Edit: Das mit RTTI bezog sich auf Jencas Post, aber das hat er inzwischen wegeditiert, also nicht wundern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438393</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Thu, 17 Jan 2008 13:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Thu, 17 Jan 2008 15:03:36 GMT]]></title><description><![CDATA[<p>Diese Info nützt Dir nichts, außer, dass Du jetzt weißt welche IID verwendet wird oder verlangt wird. Die Frage wäre einfach ob wirklich beide Interfaces identisch sind.</p>
<p>Woher bekommst Du &quot;Application&quot;? Durch einen #import?<br />
Wird wirklich die selbe DLL, TLB, IDL verwendet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438472</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 17 Jan 2008 15:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Fri, 18 Jan 2008 07:31:13 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Woher bekommst Du &quot;Application&quot;? Durch einen #import?</p>
</blockquote>
<p>Ich glaube ja, es wird zumindest eine externe Bibliothek verwendet. Aber ich habe keine Ahnung, was da drinsteht, deswegen bin ich mir nicht wirklich sicher. Gibts eigentlich einen Weg, sowas rauszufinden? Zur Sicherheit hier nochmal die ganze Klasse:</p>
<pre><code class="language-cpp">/*------------------------------------------------------------------------------*
 * File Name: OriginClient.cpp													*
 * Creation:  LY 4/7/2004														*
 * Purpose: Implementation of utility functions to access Origin Automation		*
 *			server																*
 * Copyright (C) OriginLab Corp.												*
 * All Rights Reserved															*
 *------------------------------------------------------------------------------*/

#include &quot;StdAfx.h&quot;
#include &quot;.\originclient.h&quot;

#pragma comment(lib, &quot;comsupp.lib&quot;)

COriginClient::COriginClient(int nOption)
{
	//Initialize COM
	CoInitialize(NULL);

	//Create instance of Origin
	HRESULT hr = 0;
	switch( nOption )
	{
		case USE_EXIST_FIRST:
			hr = m_pOApp.CreateInstance( __uuidof(ApplicationSI) );
			break;

		case ALWAYS_CREATE_NEW:
		default:
			hr = m_pOApp.CreateInstance( __uuidof(Application) );
			break;
	}
}

COriginClient::~COriginClient(void)
{
	//Release the created instance of Origin
	if( m_pOApp != NULL )
        m_pOApp.Release();		

	//Uninit COM
	CoUninitialize();
}

BOOL COriginClient::IsValid()
{
	return (m_pOApp != NULL);
}

BOOL COriginClient::GetWorksheet(LPCSTR lpszWks, _variant_t&amp; val)
{
	BOOL bRet = FALSE;
	if( m_pOApp == NULL )
		return bRet;

	try
	{
		val = m_pOApp-&gt;GetWorksheet( _bstr_t(lpszWks) );
		bRet = TRUE;
	}
	catch(...)
	{
		TRACE(&quot;ERROR during Origin access&quot;);
		bRet = FALSE;
	}	

	return bRet;
}

BOOL COriginClient::SetWorksheet(LPCSTR lpszWks, _variant_t val, int nRowStart)
{
	BOOL bRet = FALSE;
	if( m_pOApp == NULL )
		return bRet;

	_variant_t valRowStart;
	valRowStart.vt = VT_I4;
	valRowStart.intVal = nRowStart;

	try
	{
		bRet = m_pOApp-&gt;PutWorksheet( _bstr_t(lpszWks), val, valRowStart );			
	}
	catch(...)
	{
		TRACE(&quot;ERROR during Origin access&quot;);
	}

	return bRet;
}
</code></pre>
<p>Und das Headerfile noch dazu:</p>
<pre><code class="language-cpp">/*------------------------------------------------------------------------------*
 * File Name: OriginClient.h													*
 * Creation:  LY 4/7/2004														*
 * Purpose: Utility functions to access Origin Automation server				*
 * Copyright (C) OriginLab Corp.												*
 * All Rights Reserved															*
 *------------------------------------------------------------------------------*/

#include &quot;comdef.h&quot;
#include &quot;comutil.h&quot;

#pragma once

#import &quot;.\Origin.tlb&quot; rename_namespace(&quot;OrgApplication&quot;)
using namespace OrgApplication;

#define IS_VALID_ORIGIN_PTR(_p)		( _p != NULL &amp;&amp; _p-&gt;IsValid() )
#define ORIGIN_WINTYPE_WKS		2

enum {
	ALWAYS_CREATE_NEW = 0,
	USE_EXIST_FIRST
};

class COriginClient
{
public:
	COriginClient(int nOption = USE_EXIST_FIRST);
	~COriginClient(void);

public:
	// This demonstrates how to wrap automation methods and provide
	// user specified calling arguments
	BOOL GetWorksheet(LPCSTR lpszWks, _variant_t&amp; val);
	BOOL SetWorksheet(LPCSTR lpszWks, _variant_t val, int nRowStart = 0);

	//Method to assert the reference to Origin automation server is valid
	BOOL IsValid();

	// This demonstrates how to allow this class to be used 
	// as the IOApplicationPtr itself.
	IOApplicationPtr operator-&gt;() const 
	{ 
		if( m_pOApp == NULL ) 
		{
			_com_issue_error(E_POINTER);
		}

		return m_pOApp; 
	}

private:
	IOApplicationPtr m_pOApp;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1438784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438784</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Fri, 18 Jan 2008 07:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Fri, 18 Jan 2008 07:37:40 GMT]]></title><description><![CDATA[<p>Bist Du sicher, dass sich hier</p>
<pre><code class="language-cpp">#import &quot;.\Origin.tlb&quot; rename_namespace(&quot;OrgApplication&quot;)
</code></pre>
<p>Auf die selbe Datei bezogen wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438786</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 18 Jan 2008 07:37:40 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Fri, 18 Jan 2008 08:05:31 GMT]]></title><description><![CDATA[<p>Ähm ich steh grad aufm Schlauch...was meinst du mit &quot;auf die selbe Datei&quot;?<br />
Meinst du, ob für das schon kompilierte Binary und meine eigene Kompilierung die selbe Datei verwendet wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438795</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Fri, 18 Jan 2008 08:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Fri, 18 Jan 2008 08:31:28 GMT]]></title><description><![CDATA[<p>Origin.tlb ist die Datei aus der die Interface-Definitionen kommen!</p>
<p>Woher ist die, wer hat die erzeugt. Ist es garantiert die selbe, wie im VC6 Projekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438818</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 18 Jan 2008 08:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Fri, 18 Jan 2008 08:55:59 GMT]]></title><description><![CDATA[<p>Die Origin.tlb wird vom Hersteller mitgeliefert zu den Klassen für den Zugriff. Ein Mitarbeiter hat mir einen kompletten Projektordner geschickt, u.a. mit einer bereits von ihm kompilierten Debug- und ReleaseVersion. Seine Binaries kann ich ausführen, selbst kompilieren geht auch hier nicht, wie gehabt. In diesem Fall hab ich ja definitiv eine korrekte Origin.tlb verwendet <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/1438835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438835</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Fri, 18 Jan 2008 08:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to Programm läuft mit MSVC6, aber nicht mit MSVS.NET2003 on Tue, 22 Jan 2008 12:09:00 GMT]]></title><description><![CDATA[<p>Also ich habe jetzt auf meinem Notebook VC++6 installiert, den Quelltext dort kompiliert. Und siehe da, er lief auf meinem PC auf Arbeit, und tat genau das, was er sollte.<br />
Kann sich das jemand erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441233</guid><dc:creator><![CDATA[BeNNeR]]></dc:creator><pubDate>Tue, 22 Jan 2008 12:09:00 GMT</pubDate></item></channel></rss>