<?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[Problem mit MT DLL]]></title><description><![CDATA[<p>Hallo Leute ich hab da so ein Problemchen ...</p>
<p>Ich habe da eine kleine DLL geschrieben die einfach einen Thrad startet.<br />
Dieser Thread ruft dann eine Callback auf .</p>
<pre><code class="language-cpp">struct Threadst{
	void* CallBackAddr;
	BSTR  Callbackstr;
};

typedef long (__stdcall *FUNC)(BSTR pbstr); 

void MyFunc( void* threadstruct ) ;
long Amleben = 0;

long _stdcall ServerJob( BSTR str, void* addr ) 
{

	Threadst* dummy = new Threadst();
	dummy-&gt;CallBackAddr = addr;
	dummy-&gt;Callbackstr = str;

   _beginthread( MyFunc, 0 ,(void*)dummy);

   MSG msg;

   Amleben = 1;

   while( Amleben != 0 )
   {
	   Sleep(10);

	while ( ::PeekMessage(&amp;msg, NULL, NULL, NULL, PM_REMOVE) )
    {
		::TranslateMessage(&amp;msg);
        ::DispatchMessage(&amp;msg);
	}

   }

   return 0;

}

void MyFunc( void* threatstruct ) 
{
	MSG msg;

  Threadst* CallBackParam = (Threadst*) threatstruct;

   for ( int i = 0; i &lt; 100; i++ ) 
   {

      CString CString_str = _T(&quot;&quot;);
      if (CallBackParam-&gt;Callbackstr != NULL)
	  {
         CString s;
    	 LPSTR p = s.GetBuffer(::SysStringLen(CallBackParam-&gt;Callbackstr) + 1);
         BOOL UsedDefaultChar;

	     ::WideCharToMultiByte(CP_ACP, 0, CallBackParam-&gt;Callbackstr, -1,p,
			                   ::SysStringLen(CallBackParam-&gt;Callbackstr)+1,
			                    NULL, &amp;UsedDefaultChar);

 	     if (UsedDefaultChar)
		    CString_str = (LPCTSTR)CallBackParam-&gt;Callbackstr;
	     else
     	    CString_str = (LPCWSTR)CallBackParam-&gt;Callbackstr;
	  }

      CString xdata = CString_str;

	  long x = 0;

 	  x = ((FUNC) CallBackParam-&gt;CallBackAddr ) ((BSTR)xdata.AllocSysString());

	  Sleep(10);

	  while ( ::PeekMessage(&amp;msg, NULL, NULL, NULL, PM_REMOVE) )
    {
		::TranslateMessage(&amp;msg);
        ::DispatchMessage(&amp;msg);
	}
   }

   Amleben = 0;

}
</code></pre>
<p>nichts besonderes ....<br />
Diese DLL wird nun von VB aufgerufen. Das funztz auch noch ...<br />
aber sobald in der VB CallBack ein Sleep oder Delay oder eine MessageBox aufgerufen wird führt dies zu absturz!!!<br />
Ich bin nicht der beste in VB vielleicht han ich ja ne Bug im VB denn ich denk ich hab in dem kleinen C Proggy keinen oder ???</p>
<p>die VB Callback ...</p>
<pre><code>Sub MyCallback(ByVal strParam As String)

   MyCounter = MyCounter + 1
   frmClient.lblDisplay.Caption = CStr(strParam) &amp; &quot; (&quot; &amp; MyCounter &amp; &quot;)&quot;

   'MsgBox &quot;Hallo&quot;

   ' Call Delay(50)

   DoEvents

   'MyCallback = 0

End Sub
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/122463/problem-mit-mt-dll</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Jul 2026 06:12:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/122463.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Oct 2005 07:08:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit MT DLL on Thu, 06 Oct 2005 07:08:47 GMT]]></title><description><![CDATA[<p>Hallo Leute ich hab da so ein Problemchen ...</p>
<p>Ich habe da eine kleine DLL geschrieben die einfach einen Thrad startet.<br />
Dieser Thread ruft dann eine Callback auf .</p>
<pre><code class="language-cpp">struct Threadst{
	void* CallBackAddr;
	BSTR  Callbackstr;
};

typedef long (__stdcall *FUNC)(BSTR pbstr); 

void MyFunc( void* threadstruct ) ;
long Amleben = 0;

long _stdcall ServerJob( BSTR str, void* addr ) 
{

	Threadst* dummy = new Threadst();
	dummy-&gt;CallBackAddr = addr;
	dummy-&gt;Callbackstr = str;

   _beginthread( MyFunc, 0 ,(void*)dummy);

   MSG msg;

   Amleben = 1;

   while( Amleben != 0 )
   {
	   Sleep(10);

	while ( ::PeekMessage(&amp;msg, NULL, NULL, NULL, PM_REMOVE) )
    {
		::TranslateMessage(&amp;msg);
        ::DispatchMessage(&amp;msg);
	}

   }

   return 0;

}

void MyFunc( void* threatstruct ) 
{
	MSG msg;

  Threadst* CallBackParam = (Threadst*) threatstruct;

   for ( int i = 0; i &lt; 100; i++ ) 
   {

      CString CString_str = _T(&quot;&quot;);
      if (CallBackParam-&gt;Callbackstr != NULL)
	  {
         CString s;
    	 LPSTR p = s.GetBuffer(::SysStringLen(CallBackParam-&gt;Callbackstr) + 1);
         BOOL UsedDefaultChar;

	     ::WideCharToMultiByte(CP_ACP, 0, CallBackParam-&gt;Callbackstr, -1,p,
			                   ::SysStringLen(CallBackParam-&gt;Callbackstr)+1,
			                    NULL, &amp;UsedDefaultChar);

 	     if (UsedDefaultChar)
		    CString_str = (LPCTSTR)CallBackParam-&gt;Callbackstr;
	     else
     	    CString_str = (LPCWSTR)CallBackParam-&gt;Callbackstr;
	  }

      CString xdata = CString_str;

	  long x = 0;

 	  x = ((FUNC) CallBackParam-&gt;CallBackAddr ) ((BSTR)xdata.AllocSysString());

	  Sleep(10);

	  while ( ::PeekMessage(&amp;msg, NULL, NULL, NULL, PM_REMOVE) )
    {
		::TranslateMessage(&amp;msg);
        ::DispatchMessage(&amp;msg);
	}
   }

   Amleben = 0;

}
</code></pre>
<p>nichts besonderes ....<br />
Diese DLL wird nun von VB aufgerufen. Das funztz auch noch ...<br />
aber sobald in der VB CallBack ein Sleep oder Delay oder eine MessageBox aufgerufen wird führt dies zu absturz!!!<br />
Ich bin nicht der beste in VB vielleicht han ich ja ne Bug im VB denn ich denk ich hab in dem kleinen C Proggy keinen oder ???</p>
<p>die VB Callback ...</p>
<pre><code>Sub MyCallback(ByVal strParam As String)

   MyCounter = MyCounter + 1
   frmClient.lblDisplay.Caption = CStr(strParam) &amp; &quot; (&quot; &amp; MyCounter &amp; &quot;)&quot;

   'MsgBox &quot;Hallo&quot;

   ' Call Delay(50)

   DoEvents

   'MyCallback = 0

End Sub
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/886147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886147</guid><dc:creator><![CDATA[Thomas_III]]></dc:creator><pubDate>Thu, 06 Oct 2005 07:08:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit MT DLL on Thu, 06 Oct 2005 09:05:20 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=403" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/886228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886228</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 06 Oct 2005 09:05:20 GMT</pubDate></item></channel></rss>