<?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[dll stack übergeben]]></title><description><![CDATA[<p>Guten Abend,<br />
wenn ich in C++ eine dll erstelle mit dem Rückgabewert eines Stacks und ich diese dl in C# einbinde bekomme ich folgenden Fehler:</p>
<blockquote>
<p>&quot;return value&quot; kann nicht gemarshallt werden: Generische Typen können nicht gemarshallt werden..</p>
</blockquote>
<p>Ich bin für jede Hilfe dankbar, wie ich mein Problem dennoch realisieren kann.<br />
Danke, und einen netten Gruß ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250622/dll-stack-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 22:48:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250622.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Sep 2009 15:42:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dll stack übergeben on Mon, 21 Sep 2009 15:42:00 GMT]]></title><description><![CDATA[<p>Guten Abend,<br />
wenn ich in C++ eine dll erstelle mit dem Rückgabewert eines Stacks und ich diese dl in C# einbinde bekomme ich folgenden Fehler:</p>
<blockquote>
<p>&quot;return value&quot; kann nicht gemarshallt werden: Generische Typen können nicht gemarshallt werden..</p>
</blockquote>
<p>Ich bin für jede Hilfe dankbar, wie ich mein Problem dennoch realisieren kann.<br />
Danke, und einen netten Gruß ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782233</guid><dc:creator><![CDATA[mmarcel1]]></dc:creator><pubDate>Mon, 21 Sep 2009 15:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to dll stack übergeben on Mon, 21 Sep 2009 16:52:22 GMT]]></title><description><![CDATA[<p>Zeig mal Definition in C++ sowie Aufruf in C#.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782271</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 21 Sep 2009 16:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to dll stack übergeben on Tue, 22 Sep 2009 12:37:22 GMT]]></title><description><![CDATA[<p>Hallo <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="🙂"
    /><br />
Zunächst der Import der dll im C# Programm:</p>
<pre><code class="language-cpp">class Class1
    {
        [DllImport(&quot;myfirstdll.dll&quot;)]
        public static extern Stack&lt;string&gt; SomeFunction(char a);

        public Stack&lt;string&gt; Test12(char a)
        {
            return SomeFunction(a);

        }

    }
</code></pre>
<p>Jetzt die dll:<br />
main.h:</p>
<pre><code class="language-cpp">#ifndef __MAIN_H__
#define __MAIN_H__

#include &lt;windows.h&gt;
#include &lt;stack&gt;

/*  To use this exported function of dll, include this header
 *  in your project.
 */

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif

#ifdef __cplusplus
extern &quot;C&quot;
{
#endif

std::stack&lt;char*&gt; DLL_EXPORT SomeFunction(char a);

#ifdef __cplusplus
}
#endif

#endif // __MAIN_H__
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;main.h&quot;

// a sample exported function
std::stack&lt;char*&gt; DLL_EXPORT SomeFunction(char a)
{
   // std::stack&lt;std::string&gt; folder;
    std::stack&lt;char*&gt; data;

    data.push(&quot;hi&quot;);
    data.push(&quot;a12&quot;);

    //MessageBoxA(0, sometext, &quot;DLL Message&quot;, MB_OK | MB_ICONINFORMATION);
    return data;
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
            break;

        case DLL_PROCESS_DETACH:
            // detach from process
            break;

        case DLL_THREAD_ATTACH:
            // attach to thread
            break;

        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}
</code></pre>
<p>Wenn ich in C# den Rückgabewert als string deklariere und in der dll mit char* funktioniert es, nur mit dem Stack nicht.</p>
<p>Vielen Dank für eure Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1782602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782602</guid><dc:creator><![CDATA[mmarcel1]]></dc:creator><pubDate>Tue, 22 Sep 2009 12:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to dll stack übergeben on Tue, 22 Sep 2009 14:13:38 GMT]]></title><description><![CDATA[<p>Oh, oh...</p>
<p>Du vermischst die verschiedensten Datentypen.</p>
<p>Wenn du mittels 'extern &quot;C&quot;' von C++ aus eine Funktion exportierst, so sollten diese nur native C-Datentypen (PODs) enthalten - std::stack&lt;char&gt; ist dagegen ein C++-Datentyp (Klasse).</p>
<p>Zum anderen ist ein C#-Stack ganz anders intern organisiert als der gleichnamige C++-Datentyp.</p>
<p>Bei (const) char* und string (C#) klappt es, da dort ein automatisches Marshalling stattfindet (dagegen könntest du NICHT den C++-Datentypen std::string damit benutzen!).</p>
<p>Du mußt also deine DLL-Schnittstelle so umbauen, daß sie nur auf reine C-Datentypen aufsetzt, d.h. du wirst mehrere Funktionen anbieten müssen.<br />
(evtl. würde es klappen, wenn du ein C-Array anbietest - damit habe ich aber bisher keine Erfahrung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782626</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 22 Sep 2009 14:13:38 GMT</pubDate></item></channel></rss>