在程序中访问OutputDebugString的信息

来源:互联网 发布:java编译成class工具 编辑:程序博客网 时间:2024/06/16 02:21
///////////////////////// 一个数据结构,放在最外面的
typedef struct dbwin_buffer
    {
        DWORD   dwProcessId;
        char    data[4096-sizeof(DWORD)];
    }DEBUGBUFFER,*PDEBUGBUFFER;
/////////////////////////参数-----------放在form1中的
static HANDLE m;
    static HANDLE m_AckEvent;
    static HANDLE m_ReadyEvent;
    static HANDLE m_SharedFile;
    static HANDLE m_SharedMem;
    static Thread^ m_Capturer;
   
    static PDEBUGBUFFER pdbBuffer;
//////////////////////写在一个方法中
//----------------------OpenMutex
           m = OpenMutex( MUTEX_ALL_ACCESS, false, "DBWinMutex" );
           if (m == NULL) {
               throw gcnew Exception("Failed to create event 'DBWinMutex'");
           }
           //---------------------OpenEvent   DBWIN_BUFFER_READY
           m_AckEvent = OpenEvent(EVENT_ALL_ACCESS,false,"DBWIN_BUFFER_READY");
           if (m_AckEvent == NULL) {
           m_AckEvent = CreateEvent(NULL, false, true, "DBWIN_BUFFER_READY");
               if (m_AckEvent == NULL) {
                   throw gcnew Exception("Failed to create event 'DBWIN_BUFFER_READY'");
               }
           }
           //-----------------------OpenEvent    DBWIN_DATA_READY
           m_ReadyEvent = OpenEvent(SYNCHRONIZE,FALSE,"DBWIN_DATA_READY");
           if (m_ReadyEvent == NULL) {
               m_ReadyEvent = CreateEvent(NULL, false, false, "DBWIN_DATA_READY");
               if (m_ReadyEvent == NULL) {
                   throw gcnew Exception("Failed to create event 'DBWIN_DATA_READY'");
               }
           }
           //-----------------------OpenFileMapping    DBWIN_BUFFER
           m_SharedFile = OpenFileMapping(FILE_MAP_READ,false,"DBWIN_BUFFER");
           if (m_SharedFile == NULL) {
               m_SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096,           "DBWIN_BUFFER");
               if (m_SharedFile == NULL) {
                   throw gcnew Exception("Failed to create event 'DBWIN_BUFFER'");
               }
           }
           //可以就当是那段的内容   映射调试缓冲区
           m_SharedMem = MapViewOfFile(m_SharedFile,SECTION_MAP_READ,0,0,0);
           pdbBuffer = (PDEBUGBUFFER) MapViewOfFile(m_SharedFile, SECTION_MAP_READ, 0, 0, 0);
           if (m_SharedMem == NULL) {
               throw gcnew Exception("Failed to create event 'm_SharedMem'");
           }
           // Start a new thread where we can capture the output
           // of OutputDebugString calls so we don't block here.
           m_Capturer = gcnew Thread(gcnew ThreadStart(Capture));
           m_Capturer->Start();
////////////////////////
////////////////////////Capture 方法

private: static void Capture() {                   
            try {
                char *pp ;
                int pid;
                OutputDebugString("Hello World!" );
                while (true) {
                    SetEvent(m_AckEvent);
                    int ret = WaitForSingleObject(m_ReadyEvent, 1000);
                    if (!m_Capturer)
                        break;
                    if (ret == WAIT_OBJECT_0){
                        pid = pdbBuffer->dwProcessId;
                        pp = pdbBuffer->data;
                    }
                }
            } catch(ios::failure&   e){
                throw gcnew Exception("Failed to create event 'Thread'");
            // Cleanup
            } finally {       
                aDispose();
            }
        }

//////////////////////////int2str 从int到String的转换
static
 String^ int2str(int   num)
{
    if (num  ==   0 )
       return   " 0 " ;
  
    String^  str  =   "" ;
    int  num_  =  num  >   0   ?  num :  - 1   *  num;

    while (num_)
    {
      str  =  ( char )(num_  %   10   +   48 )  +  str;
      num_  /=   10 ;
    }

    if (num  <   0 )
      str  =   " - "   +  str;

    return  str;
}
/////////////////////////////aDispose 方法

private:
            static void aDispose() {   
                //if(!m_Capturer){
                //    WaitForSingleObject(m_Capturer, INFINITE);
                //}
            // Close AckEvent
                if (m_AckEvent != NULL) {
                if (!CloseHandle(m_AckEvent)) {
                    throw gcnew Exception("Failed to create event 'm_AckEvent'");
                }           
                m_AckEvent = NULL;   
            }           

            // Close ReadyEvent
            if (m_ReadyEvent != NULL) {
                if (!CloseHandle(m_ReadyEvent)) {
                    throw gcnew Exception("Failed to create event 'm_ReadyEvent'");
                }
                m_ReadyEvent = NULL;       
            }           
           
            // Close SharedFile
            if (m_SharedFile != NULL) {
                if (!CloseHandle(m_SharedFile)) {
                    throw gcnew Exception("Failed to create event 'm_SharedFile'");
                }
                m_SharedFile = NULL;
            }
           
   
            // Unmap SharedMem
            if (m_SharedMem != NULL) {
                if (!UnmapViewOfFile(m_SharedMem)) {
                    throw gcnew Exception("Failed to create event 'm_SharedMem'");
                }
                m_SharedMem = NULL;       
            }       

            // Close our mutex
            if (m != NULL) {
                CloseHandle(m);
                m = NULL;
            }
        }
原创粉丝点击