Problem mit MT DLL



  • Hallo Leute ich hab da so ein Problemchen ...

    Ich habe da eine kleine DLL geschrieben die einfach einen Thrad startet.
    Dieser Thread ruft dann eine Callback auf .

    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->CallBackAddr = addr;
    	dummy->Callbackstr = str;
    
       _beginthread( MyFunc, 0 ,(void*)dummy);
    
       MSG msg;
    
       Amleben = 1;
    
       while( Amleben != 0 )
       {
    	   Sleep(10);
    
    	while ( ::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE) )
        {
    		::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
    	}
    
       }
    
       return 0;
    
    }
    
    void MyFunc( void* threatstruct ) 
    {
    	MSG msg;
    
      Threadst* CallBackParam = (Threadst*) threatstruct;
    
       for ( int i = 0; i < 100; i++ ) 
       {
    
          CString CString_str = _T("");
          if (CallBackParam->Callbackstr != NULL)
    	  {
             CString s;
        	 LPSTR p = s.GetBuffer(::SysStringLen(CallBackParam->Callbackstr) + 1);
             BOOL UsedDefaultChar;
    
    	     ::WideCharToMultiByte(CP_ACP, 0, CallBackParam->Callbackstr, -1,p,
    			                   ::SysStringLen(CallBackParam->Callbackstr)+1,
    			                    NULL, &UsedDefaultChar);
    
     	     if (UsedDefaultChar)
    		    CString_str = (LPCTSTR)CallBackParam->Callbackstr;
    	     else
         	    CString_str = (LPCWSTR)CallBackParam->Callbackstr;
    	  }
    
          CString xdata = CString_str;
    
    	  long x = 0;
    
     	  x = ((FUNC) CallBackParam->CallBackAddr ) ((BSTR)xdata.AllocSysString());
    
    	  Sleep(10);
    
    	  while ( ::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE) )
        {
    		::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
    	}
       }
    
       Amleben = 0;
    
    }
    

    nichts besonderes ....
    Diese DLL wird nun von VB aufgerufen. Das funztz auch noch ...
    aber sobald in der VB CallBack ein Sleep oder Delay oder eine MessageBox aufgerufen wird führt dies zu absturz!!!
    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 ???

    die VB Callback ...

    Sub MyCallback(ByVal strParam As String)
    
       MyCounter = MyCounter + 1
       frmClient.lblDisplay.Caption = CStr(strParam) & " (" & MyCounter & ")"
    
       'MsgBox "Hallo"
    
       ' Call Delay(50)
    
       DoEvents
    
       'MyCallback = 0
    
    End Sub
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten