<?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[va_list und Weitergabe]]></title><description><![CDATA[<p>Hallo.<br />
Wonach genau muss ich suchen, wenn ich mehr Informationen über va_list und Konsorten haben möchte? Ich weiß nämlich nicht einmal, wie genau diese &quot;Technik&quot; heißt, um die Parameter aus den <code>...</code> zu extrahieren.</p>
<p>Ich möchte nämlich eine Art Wrapper für eine bereits existierende Funktion schreiben die <code>...</code> annimmt. Ich erweitere eine Anwendung um ein Python Plugin, und Python bietet die Funktion <code>PyArg_ParseTuple(PyObject*, const char *parsestring, ...);</code> . Aufruf (Beispiel):</p>
<pre><code class="language-cpp">int iArg1;
float flArg2;

PyArg_ParseTuple(pyArgs, &quot;if&quot;, iArg1, flArg2);
</code></pre>
<p>Vom ganzen her ist das logisch und einfach zu verstehen (für mich). Nun gibt es in meiner Anwendung aber eine ganze Menge mehr Möglichkeiten, Objekte und Typen zu übergeben. Deshalb möchte ich mir einen Wrapper erstellen und muss sozusagen die Übergabe von <code>...</code> simulieren. Hier mal Pseudocode:</p>
<pre><code class="language-cpp">void CPython::getArgs(PyObject *pyArgs, int iNeeded, int iOptional, ...)
{
    // Variablen erstellen
    // Parsestring erstellen
    // Objekte anpassen

    // Nun die aufbereiteten Daten an die echte Funktion weitergeben:
    // Genau hier liegt beim Problem. Wie kriege ich das hin mit den ...?
    // Ich könnte natürlich für jede mögliche Anzahl von 1 bis 30 Parametern eine
    // if Abfragen erstellen und dann die passende Anzahl aufrufen
    // Aber mir geht es mittlerweile auch um's Prinzip
    PyArg_ParseTuple(pyArgs, parsestring, dynParam1, dynParam2);
}

// Beispielaufruf
int iArg1;
float flArg2;
pPython-&gt;getArgs(pyArgs, 2, 0, PyType_Int, &amp;iArg1, PyType_Float, &amp;flArg2);
</code></pre>
<p>Das ganze wäre dann halt noch zu ergänzen.</p>
<p>Gruß &amp; Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260400/va_list-und-weitergabe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 03:26:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260400.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Feb 2010 16:41:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to va_list und Weitergabe on Thu, 04 Feb 2010 16:41:46 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Wonach genau muss ich suchen, wenn ich mehr Informationen über va_list und Konsorten haben möchte? Ich weiß nämlich nicht einmal, wie genau diese &quot;Technik&quot; heißt, um die Parameter aus den <code>...</code> zu extrahieren.</p>
<p>Ich möchte nämlich eine Art Wrapper für eine bereits existierende Funktion schreiben die <code>...</code> annimmt. Ich erweitere eine Anwendung um ein Python Plugin, und Python bietet die Funktion <code>PyArg_ParseTuple(PyObject*, const char *parsestring, ...);</code> . Aufruf (Beispiel):</p>
<pre><code class="language-cpp">int iArg1;
float flArg2;

PyArg_ParseTuple(pyArgs, &quot;if&quot;, iArg1, flArg2);
</code></pre>
<p>Vom ganzen her ist das logisch und einfach zu verstehen (für mich). Nun gibt es in meiner Anwendung aber eine ganze Menge mehr Möglichkeiten, Objekte und Typen zu übergeben. Deshalb möchte ich mir einen Wrapper erstellen und muss sozusagen die Übergabe von <code>...</code> simulieren. Hier mal Pseudocode:</p>
<pre><code class="language-cpp">void CPython::getArgs(PyObject *pyArgs, int iNeeded, int iOptional, ...)
{
    // Variablen erstellen
    // Parsestring erstellen
    // Objekte anpassen

    // Nun die aufbereiteten Daten an die echte Funktion weitergeben:
    // Genau hier liegt beim Problem. Wie kriege ich das hin mit den ...?
    // Ich könnte natürlich für jede mögliche Anzahl von 1 bis 30 Parametern eine
    // if Abfragen erstellen und dann die passende Anzahl aufrufen
    // Aber mir geht es mittlerweile auch um's Prinzip
    PyArg_ParseTuple(pyArgs, parsestring, dynParam1, dynParam2);
}

// Beispielaufruf
int iArg1;
float flArg2;
pPython-&gt;getArgs(pyArgs, 2, 0, PyType_Int, &amp;iArg1, PyType_Float, &amp;flArg2);
</code></pre>
<p>Das ganze wäre dann halt noch zu ergänzen.</p>
<p>Gruß &amp; Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1850548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1850548</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Thu, 04 Feb 2010 16:41:46 GMT</pubDate></item></channel></rss>