<?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[Handle für SetDlgItemText]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich versuche gerade WINAPI dll als ausgabe Interface für einem FORTRAN Programm zu programmieren.</p>
<p>Das Ausgabe-Interface besteht aus Dialog-Box, die ich anhand der Ressourcen Manager erstellt habe. Mein Ziel ist es mittels eine Void-Routine den String Variable von Fortran in einem WINAPI listbox zu zeigen.</p>
<p>Bis jetzt hat alles Funktioniert. Dialog ist einwandfrei gezeigt. Das Problem ist jetzt dass sobald ich ein String aus Fortran übergebe, sturtzt mein Programm ab. Aus dem Fehlermeldung bekomme ich Nr.1400(Ungültige Fensterhandle).</p>
<p>Hinweise zur DLL:<br />
Das initiieren erfolgt mittels Thread.</p>
<p>Das Fensterhandle HWND habe ich als Globalevariable gesetzt.</p>
<p>Für Übergabe zum Listbox habe ich in dem void zur String übergabe den SetDlgItemText(HWND,IDC_LIST1,text) genutzt.</p>
<p>Bisherige Massnahme:<br />
Ein Übergabefehler ist auszuschliessen, da mittels &quot;Printf&quot; der String aus Fortran in konsole problemlos angezeigt werden kann.</p>
<p>Ich habe versuch dem Fensterhandle in einem Struktur zu speichern und diese bei dem String übergabe zu rufen, leider sturzt das Programm ohne weitere Fehlermeldung ab.</p>
<p>Für eure Hilfe und Aufklärung bedanke ich mich sehr</p>
<p>Grüß</p>
<p>PS: Falls es Hilfreich würde kann ich den QCode hier wiedergeben</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183317/handle-für-setdlgitemtext</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 01:12:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183317.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Jun 2007 21:57:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Handle für SetDlgItemText on Mon, 04 Jun 2007 04:59:11 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich versuche gerade WINAPI dll als ausgabe Interface für einem FORTRAN Programm zu programmieren.</p>
<p>Das Ausgabe-Interface besteht aus Dialog-Box, die ich anhand der Ressourcen Manager erstellt habe. Mein Ziel ist es mittels eine Void-Routine den String Variable von Fortran in einem WINAPI listbox zu zeigen.</p>
<p>Bis jetzt hat alles Funktioniert. Dialog ist einwandfrei gezeigt. Das Problem ist jetzt dass sobald ich ein String aus Fortran übergebe, sturtzt mein Programm ab. Aus dem Fehlermeldung bekomme ich Nr.1400(Ungültige Fensterhandle).</p>
<p>Hinweise zur DLL:<br />
Das initiieren erfolgt mittels Thread.</p>
<p>Das Fensterhandle HWND habe ich als Globalevariable gesetzt.</p>
<p>Für Übergabe zum Listbox habe ich in dem void zur String übergabe den SetDlgItemText(HWND,IDC_LIST1,text) genutzt.</p>
<p>Bisherige Massnahme:<br />
Ein Übergabefehler ist auszuschliessen, da mittels &quot;Printf&quot; der String aus Fortran in konsole problemlos angezeigt werden kann.</p>
<p>Ich habe versuch dem Fensterhandle in einem Struktur zu speichern und diese bei dem String übergabe zu rufen, leider sturzt das Programm ohne weitere Fehlermeldung ab.</p>
<p>Für eure Hilfe und Aufklärung bedanke ich mich sehr</p>
<p>Grüß</p>
<p>PS: Falls es Hilfreich würde kann ich den QCode hier wiedergeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298128</guid><dc:creator><![CDATA[mr.Shankly]]></dc:creator><pubDate>Mon, 04 Jun 2007 04:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to Handle für SetDlgItemText on Mon, 04 Jun 2007 17:45:56 GMT]]></title><description><![CDATA[<p>Hast Du den Ablauf mal im Debugger geprüft (inklusive Wertebelegungen von Variablen) ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298778</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Mon, 04 Jun 2007 17:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Handle für SetDlgItemText on Tue, 05 Jun 2007 04:30:17 GMT]]></title><description><![CDATA[<p>Da bin ich auch etwas Ratlos. Wenn ich die Dll aus VS debugge, mit dem Anweisung dass ein Exe ihm ausführen sollte, läuft der debugger nicht. Deshalb debugge ich nur über Fortran, die Werte ermittlung erfolge entweder über Printf oder GetLastError.</p>
<p>Laut der letzte Fehlermeldung liegt das problem in Fensterhandle. Also beim Fenster-init habe ich mein Dialog mittels einer Funktion in einer Struktur gespeichert. wie unten zu sehen ist</p>
<pre><code>typedef struct {
    HWND   dialog;
    int    font;
} GC; 
//Global var
GC       *gwxGC;
HWD gwxDlg; //Mein Dialog

Thread1(PVOID pvoid){
.
.
gwxGC = gwxgc(&amp;gwxDlg, &amp;fontsize);
.
}

GC* 
gwxgc(HWND *dialog, int *fontsize)
{
    GC *gc;

    gc = (GC *) malloc(sizeof(GC));

    gc-&gt;dialog	 = *dialog;
    gc-&gt;font     = *fontsize;

    return gc;
}
</code></pre>
<p>Und die Schreibtfunktion, die aus Fortran gerufen wird</p>
<pre><code>void __stdcall //Aus F gerufen
GWXSTRING(char *text, size_t text_LEN)
{
    int i;
	HWND gwxmemDlg;
    GC  *gcontext;

	printf(&quot;Text aus F: %s\n&quot;,text);

	gcontext = gwxGC;
	gwxmemDlg = gcontext-&gt;dialog;
	BOOL PARAM = SetDlgItemText(gwxmemDlg,IDC_LIST1,text);
	if (!PARAM) {

		LPVOID lpMsgBuf;
        LPVOID lpDisplayBuf;
		TCHAR szBuf[80]; 

        DWORD dw = GetLastError();
		LPTSTR lpszFunction;

        FormatMessage(
                       FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                       FORMAT_MESSAGE_FROM_SYSTEM,
                       NULL,
                       dw,
                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                       (LPTSTR) &amp;lpMsgBuf,
                       0, NULL );

		wsprintf(szBuf, 
        &quot;%s failed with error %d: %s&quot;, 
			lpszFunction, dw, lpMsgBuf); 

        MessageBox(NULL, szBuf, TEXT(&quot;Error&quot;), MB_OK); 
        exit(1);
    }

}
</code></pre>
<p>Ich bin newbie in C, Deshalb bin ich sehr dankbar für eure Aufklärung</p>
<p>Danke, und Grüß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298983</guid><dc:creator><![CDATA[mr.Shankly]]></dc:creator><pubDate>Tue, 05 Jun 2007 04:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to Handle für SetDlgItemText on Wed, 06 Jun 2007 14:09:18 GMT]]></title><description><![CDATA[<p>Puhhh, was ein Code...die C'ler und ihre globalen Variablen <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="😃"
    /> ... also:<br />
Lass mal hier...:</p>
<pre><code class="language-cpp">GC*
gwxgc(HWND *dialog, int *fontsize)
{
    GC *gc;

    gc = (GC *) malloc(sizeof(GC));

    gc-&gt;dialog     = *dialog;
    gc-&gt;font     = *fontsize;

    return gc;
}
</code></pre>
<p>...die Zeiger weg, also nur: <code>HWND dialog, int fontsize</code> und dann auch bei der Zuweisung ohne Dereferenzierungsoperator. Der Code ist -finde ich- durch die globalen Variablen und den lokalen Aufruf von <em>malloc</em> (man kann schnell das <em>free</em> vergessen, was ich in dem Code jetzt auch gar nicht finde...) sehr unübersichtlich. Muss es denn unbedingt dynamisch allokiert sein ( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> 'gwxGC') ?</p>
<p>PS: Du musst, bei Angabe des Flags <em>FORMAT_MESSAGE_ALLOCATE_BUFFER</em> an die Funktion <em>FormatMessage</em> den Buffer auch wieder freigeben (<em>LocalFree</em>), siehe hier: <a href="http://msdn2.microsoft.com/en-us/library/ms680582.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms680582.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300088</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:09:18 GMT</pubDate></item></channel></rss>