<?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[Win32 exceptions]]></title><description><![CDATA[<p>Ich hab in letzter Zeit ein wenig mit Win32 exceptions gearbeitet und habe mich gewundert ob man die nicht mit den C++ exception combiniren könnte. Ich hab mal gegoogled und bin auf _set_se_translator gestossen.</p>
<p>Der Haken an der Sache ist nun der, dass ich kein VC hab. Ich hab mal mit dem BC5.5 ein wenig herum probiert und da werden catchs konsequent übersprungen (__except klappt aber...).</p>
<p>Ich hab bereits versucht _set_se_translator dynamisch zu laden und zu benutzen, was auch klappt jedoch wird meine translator Funktion nie aufgerufen.</p>
<p>Hier ist was bis jetzt ausprobiert habe:</p>
<pre><code class="language-cpp">#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;windows.h&gt;
#include&lt;stdexcept&gt;
#include&lt;iostream&gt;
using namespace std;

typedef void (*_se_translator_function)( unsigned int, struct _EXCEPTION_POINTERS* );
_se_translator_function (*_set_se_translator)( _se_translator_function se_trans_func );

HINSTANCE _msvcrt_dll=0;
void _free_set_se_translator(){
  FreeLibrary(_msvcrt_dll);
}
void _load_set_se_translator(){
  _msvcrt_dll=LoadLibrary (&quot;msvcrt.dll&quot;);
  if(!_msvcrt_dll)
    cout&lt;&lt;&quot;Could not load msvcrt.dll&quot;&lt;&lt;endl;
  _set_se_translator=(_se_translator_function (*)( _se_translator_function))GetProcAddress(_msvcrt_dll,&quot;?set_unexpected@@YAP6AXXZP6AXXZ@Z&quot;);
  if(!_set_se_translator)
    cout&lt;&lt;&quot;Could not find ?set_unexpected@@YAP6AXXZP6AXXZ@Z&quot;&lt;&lt;endl;
  atexit(_free_set_se_translator);
}
void SEFunc();
void trans_func(unsigned int,EXCEPTION_POINTERS*)
{
    cout&lt;&lt;&quot;In trans_func&quot;&lt;&lt;endl;
    throw runtime_error(&quot;Win32 error&quot;);
}
int main( void )
{
  try{
    _load_set_se_translator();
    _set_se_translator(trans_func);
    SEFunc();
  }catch(exception&amp;err){
    cout&lt;&lt;err.what()&lt;&lt;endl;
  }
  cin.get();
  return 0;
}

void SEFunc()
{
    __try
    {
        cout&lt;&lt;&quot;Starting __try&quot;&lt;&lt;endl;
        /*int x, y=0;
        x = 5 / y;*/
        int*x=0;
        *x=0;
        cout&lt;&lt;&quot;Ending __try&quot;&lt;&lt;endl;

    }
    __except(EXCEPTION_CONTINUE_SEARCH)
    {
        cout&lt;&lt;&quot;In except&quot; &lt;&lt;endl;
    }
}
</code></pre>
<p>PS: Es wäre echt genial wenn jemand auch einen Weg für MinGW kennen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/79097/win32-exceptions</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 13:09:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/79097.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Jul 2004 20:21:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Win32 exceptions on Wed, 07 Jul 2004 20:21:41 GMT]]></title><description><![CDATA[<p>Ich hab in letzter Zeit ein wenig mit Win32 exceptions gearbeitet und habe mich gewundert ob man die nicht mit den C++ exception combiniren könnte. Ich hab mal gegoogled und bin auf _set_se_translator gestossen.</p>
<p>Der Haken an der Sache ist nun der, dass ich kein VC hab. Ich hab mal mit dem BC5.5 ein wenig herum probiert und da werden catchs konsequent übersprungen (__except klappt aber...).</p>
<p>Ich hab bereits versucht _set_se_translator dynamisch zu laden und zu benutzen, was auch klappt jedoch wird meine translator Funktion nie aufgerufen.</p>
<p>Hier ist was bis jetzt ausprobiert habe:</p>
<pre><code class="language-cpp">#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;windows.h&gt;
#include&lt;stdexcept&gt;
#include&lt;iostream&gt;
using namespace std;

typedef void (*_se_translator_function)( unsigned int, struct _EXCEPTION_POINTERS* );
_se_translator_function (*_set_se_translator)( _se_translator_function se_trans_func );

HINSTANCE _msvcrt_dll=0;
void _free_set_se_translator(){
  FreeLibrary(_msvcrt_dll);
}
void _load_set_se_translator(){
  _msvcrt_dll=LoadLibrary (&quot;msvcrt.dll&quot;);
  if(!_msvcrt_dll)
    cout&lt;&lt;&quot;Could not load msvcrt.dll&quot;&lt;&lt;endl;
  _set_se_translator=(_se_translator_function (*)( _se_translator_function))GetProcAddress(_msvcrt_dll,&quot;?set_unexpected@@YAP6AXXZP6AXXZ@Z&quot;);
  if(!_set_se_translator)
    cout&lt;&lt;&quot;Could not find ?set_unexpected@@YAP6AXXZP6AXXZ@Z&quot;&lt;&lt;endl;
  atexit(_free_set_se_translator);
}
void SEFunc();
void trans_func(unsigned int,EXCEPTION_POINTERS*)
{
    cout&lt;&lt;&quot;In trans_func&quot;&lt;&lt;endl;
    throw runtime_error(&quot;Win32 error&quot;);
}
int main( void )
{
  try{
    _load_set_se_translator();
    _set_se_translator(trans_func);
    SEFunc();
  }catch(exception&amp;err){
    cout&lt;&lt;err.what()&lt;&lt;endl;
  }
  cin.get();
  return 0;
}

void SEFunc()
{
    __try
    {
        cout&lt;&lt;&quot;Starting __try&quot;&lt;&lt;endl;
        /*int x, y=0;
        x = 5 / y;*/
        int*x=0;
        *x=0;
        cout&lt;&lt;&quot;Ending __try&quot;&lt;&lt;endl;

    }
    __except(EXCEPTION_CONTINUE_SEARCH)
    {
        cout&lt;&lt;&quot;In except&quot; &lt;&lt;endl;
    }
}
</code></pre>
<p>PS: Es wäre echt genial wenn jemand auch einen Weg für MinGW kennen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/555596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/555596</guid><dc:creator><![CDATA[_Jemand_]]></dc:creator><pubDate>Wed, 07 Jul 2004 20:21:41 GMT</pubDate></item></channel></rss>