<?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[Interface: Aufruf bei bestimmten Funktionen schlägt Fehl]]></title><description><![CDATA[<p>Hallo,<br />
ich kämpfe gerade mit einem Problem, dass ich absolut nicht nachvollziehen kann.</p>
<p>Ich habe folgendes Interface:</p>
<pre><code class="language-cpp">class IPyModule
{
public:
	virtual ~IPyModule() { }
	virtual void AddFunction(const string &amp;strName, PyFunction pyFunction, const string &amp;strDocumentation = &quot;&quot;) = 0;
	virtual void AddFunction(const string &amp;strName, PyFunctionKeywords pyFunctionKeywords, const string &amp;strDocumentation = &quot;&quot;) = 0;
	virtual void AddFunction(const string &amp;strName, PyFunctionNoArgs pyFunctionNoArgs, const string &amp;strDocumentation = &quot;&quot;) = 0;
	virtual void AddConstant(const string &amp;strName, long nValue) = 0;
	virtual void AddConstant(const string &amp;strName, const string &amp;strValue) = 0;
	virtual void AddException(const string &amp;strName, PyObject **pyException) = 0;
	virtual bool Initialize(string &amp;strError) = 0;
	virtual long GetConstantLong(const string &amp;strName) const = 0;
	virtual const string &amp;GetConstantString(const string &amp;strName) const = 0;
	virtual PyObject *GetException(const string &amp;strName) const = 0;
	virtual IInterpreter *GetInterpreter() const = 0;
	virtual const string &amp;GetName() const = 0;
	virtual const string &amp;GetDocumentation() const = 0;
	virtual PyObject *GetPyModule() const = 0;
	virtual PyObject *GetPyDict() const = 0;
	virtual PyMethodDef *GetMethodDef() const = 0;
};
</code></pre>
<p>Dieses liefere ich in meine SDK aus.</p>
<p>In meinem Hauptprogramm habe ich nun die Implementation:</p>
<pre><code class="language-cpp">class CPyModule: public IPyModule
{
public:
	CPyModule(IInterpreter *pInterpreter, const string &amp;strName, const string &amp;strDocumentation = &quot;&quot;);
	virtual ~CPyModule();
	virtual void AddFunction(const string &amp;strName, PyFunction pyFunction, const string &amp;strDocumentation = &quot;&quot;);
	virtual void AddFunction(const string &amp;strName, PyFunctionKeywords pyFunctionKeywords, const string &amp;strDocumentation = &quot;&quot;);
	virtual void AddFunction(const string &amp;strName, PyFunctionNoArgs pyFunctionNoArgs, const string &amp;strDocumentation = &quot;&quot;);
	virtual void AddConstant(const string &amp;strName, long nValue);
	virtual void AddConstant(const string &amp;strName, const string &amp;strValue);
	virtual void AddException(const string &amp;strName, PyObject **pyException);
	virtual bool Initialize(string &amp;strError);
	virtual long GetConstantLong(const string &amp;strName) const;
	virtual const string &amp;GetConstantString(const string &amp;strName) const;
	virtual PyObject *GetException(const string &amp;strName) const;
	virtual IInterpreter *GetInterpreter() const;
	virtual const string &amp;GetName() const;
	virtual const string &amp;GetDocumentation() const;
	virtual PyObject *GetPyModule() const;
	virtual PyObject *GetPyDict() const;
	virtual PyMethodDef *GetMethodDef() const;

public:
	bool Release(string &amp;strError);

private:
	IInterpreter *m_pInterpreter;
	string m_strName;
	string m_strDocumentation;
	PyObject *m_pyModule;
	PyObject *m_pyDict;
	PyMethodDef *m_pyMethodDef;
	list&lt;Function_s&gt; m_Functions;
	map&lt;string, long&gt; m_ConstantsLong;
	map&lt;string, string&gt; m_ConstantsString;
	map&lt;string, Exception_s&gt; m_Exceptions;
};
</code></pre>
<p>Über eine Schnittstelle können sich Plugins nun neue CPyModule-Instanzen erstellen lassen, welche von IPyModule ableiten. Somit sollten Plugins ja problemlos auf alle Funktionen von IPyModule zugreifen können.</p>
<p>Das ganze funktioniert auch, aber eben nur bis zur Funktion <code>IPyModule::Initialize</code> . Alles was ich danach aufrufe, erzeugt einen sofortigen Crash des ganzen Programmes.<br />
Edit: Damit meine ich, dass alle Funktionen, die unterhalb von &quot;Initialize&quot; definiert sind, nicht aufrufbar sind.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">pModule = pScript-&gt;GetInterpreter()-&gt;AddModule(&quot;test&quot;);
pModule-&gt;AddFunction(&quot;hallo&quot;, PyHallo);
pModule-&gt;AddConstant(&quot;const&quot;, 20);
pModule-&gt;Initialize(strError);

// bis hier hin läuft alles gut
// wenn ich jetzt beispielsweise pModule-&gt;GetInterpreter() aufrufen will, crasht es
</code></pre>
<p>Weiß jemand, woran das liegen könnte? Ich verstehe es einfach nicht...<br />
Programm und Plugin benutzen 100% die gleichen Headerdateien, sind sogar zum exakt gleichen Zeitpunkt mit dem gleichen Compiler (MSVC 2008) auf dem selben System (Windows XP) erstellt worden...</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281212/interface-aufruf-bei-bestimmten-funktionen-schlägt-fehl</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 20:03:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281212.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Jan 2011 15:31:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Interface: Aufruf bei bestimmten Funktionen schlägt Fehl on Fri, 28 Jan 2011 15:33:58 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich kämpfe gerade mit einem Problem, dass ich absolut nicht nachvollziehen kann.</p>
<p>Ich habe folgendes Interface:</p>
<pre><code class="language-cpp">class IPyModule
{
public:
	virtual ~IPyModule() { }
	virtual void AddFunction(const string &amp;strName, PyFunction pyFunction, const string &amp;strDocumentation = &quot;&quot;) = 0;
	virtual void AddFunction(const string &amp;strName, PyFunctionKeywords pyFunctionKeywords, const string &amp;strDocumentation = &quot;&quot;) = 0;
	virtual void AddFunction(const string &amp;strName, PyFunctionNoArgs pyFunctionNoArgs, const string &amp;strDocumentation = &quot;&quot;) = 0;
	virtual void AddConstant(const string &amp;strName, long nValue) = 0;
	virtual void AddConstant(const string &amp;strName, const string &amp;strValue) = 0;
	virtual void AddException(const string &amp;strName, PyObject **pyException) = 0;
	virtual bool Initialize(string &amp;strError) = 0;
	virtual long GetConstantLong(const string &amp;strName) const = 0;
	virtual const string &amp;GetConstantString(const string &amp;strName) const = 0;
	virtual PyObject *GetException(const string &amp;strName) const = 0;
	virtual IInterpreter *GetInterpreter() const = 0;
	virtual const string &amp;GetName() const = 0;
	virtual const string &amp;GetDocumentation() const = 0;
	virtual PyObject *GetPyModule() const = 0;
	virtual PyObject *GetPyDict() const = 0;
	virtual PyMethodDef *GetMethodDef() const = 0;
};
</code></pre>
<p>Dieses liefere ich in meine SDK aus.</p>
<p>In meinem Hauptprogramm habe ich nun die Implementation:</p>
<pre><code class="language-cpp">class CPyModule: public IPyModule
{
public:
	CPyModule(IInterpreter *pInterpreter, const string &amp;strName, const string &amp;strDocumentation = &quot;&quot;);
	virtual ~CPyModule();
	virtual void AddFunction(const string &amp;strName, PyFunction pyFunction, const string &amp;strDocumentation = &quot;&quot;);
	virtual void AddFunction(const string &amp;strName, PyFunctionKeywords pyFunctionKeywords, const string &amp;strDocumentation = &quot;&quot;);
	virtual void AddFunction(const string &amp;strName, PyFunctionNoArgs pyFunctionNoArgs, const string &amp;strDocumentation = &quot;&quot;);
	virtual void AddConstant(const string &amp;strName, long nValue);
	virtual void AddConstant(const string &amp;strName, const string &amp;strValue);
	virtual void AddException(const string &amp;strName, PyObject **pyException);
	virtual bool Initialize(string &amp;strError);
	virtual long GetConstantLong(const string &amp;strName) const;
	virtual const string &amp;GetConstantString(const string &amp;strName) const;
	virtual PyObject *GetException(const string &amp;strName) const;
	virtual IInterpreter *GetInterpreter() const;
	virtual const string &amp;GetName() const;
	virtual const string &amp;GetDocumentation() const;
	virtual PyObject *GetPyModule() const;
	virtual PyObject *GetPyDict() const;
	virtual PyMethodDef *GetMethodDef() const;

public:
	bool Release(string &amp;strError);

private:
	IInterpreter *m_pInterpreter;
	string m_strName;
	string m_strDocumentation;
	PyObject *m_pyModule;
	PyObject *m_pyDict;
	PyMethodDef *m_pyMethodDef;
	list&lt;Function_s&gt; m_Functions;
	map&lt;string, long&gt; m_ConstantsLong;
	map&lt;string, string&gt; m_ConstantsString;
	map&lt;string, Exception_s&gt; m_Exceptions;
};
</code></pre>
<p>Über eine Schnittstelle können sich Plugins nun neue CPyModule-Instanzen erstellen lassen, welche von IPyModule ableiten. Somit sollten Plugins ja problemlos auf alle Funktionen von IPyModule zugreifen können.</p>
<p>Das ganze funktioniert auch, aber eben nur bis zur Funktion <code>IPyModule::Initialize</code> . Alles was ich danach aufrufe, erzeugt einen sofortigen Crash des ganzen Programmes.<br />
Edit: Damit meine ich, dass alle Funktionen, die unterhalb von &quot;Initialize&quot; definiert sind, nicht aufrufbar sind.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">pModule = pScript-&gt;GetInterpreter()-&gt;AddModule(&quot;test&quot;);
pModule-&gt;AddFunction(&quot;hallo&quot;, PyHallo);
pModule-&gt;AddConstant(&quot;const&quot;, 20);
pModule-&gt;Initialize(strError);

// bis hier hin läuft alles gut
// wenn ich jetzt beispielsweise pModule-&gt;GetInterpreter() aufrufen will, crasht es
</code></pre>
<p>Weiß jemand, woran das liegen könnte? Ich verstehe es einfach nicht...<br />
Programm und Plugin benutzen 100% die gleichen Headerdateien, sind sogar zum exakt gleichen Zeitpunkt mit dem gleichen Compiler (MSVC 2008) auf dem selben System (Windows XP) erstellt worden...</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2013639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2013639</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Fri, 28 Jan 2011 15:33:58 GMT</pubDate></item><item><title><![CDATA[Reply to Interface: Aufruf bei bestimmten Funktionen schlägt Fehl on Fri, 28 Jan 2011 15:37:57 GMT]]></title><description><![CDATA[<p>Den Fehler wird man Dir wohl kaum nennen können. Dazu ist der Codeumfang zu gering.</p>
<p>Füg einfach einige Debug-Ausgaben und assert hinzu.</p>
<pre><code class="language-cpp">pModule = pScript-&gt;GetInterpreter()-&gt;AddModule(&quot;test&quot;);
pModule-&gt;AddFunction(&quot;hallo&quot;, PyHallo);
pModule-&gt;AddConstant(&quot;const&quot;, 20);

assert(pModule);

assert(pModule-&gt;Initialize(strError));
</code></pre>
<p>Und das mit strError kommt mir komisch vor. Vielleicht hapert es daran. Weitere Debug-Ausgaben!</p>
<p>Und wenn alles nicht hilft, dann mach einige Tage Pause und probiers danach nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2013640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2013640</guid><dc:creator><![CDATA[jhkhjkjh]]></dc:creator><pubDate>Fri, 28 Jan 2011 15:37:57 GMT</pubDate></item></channel></rss>