解决方案 »

  1.   

    就是比如说,我写一个DLL去读取串口数据,当从串口读到数据后,我想从DLL激活一个事件,激发DLL的调用者执行相应的动作。
      

  2.   

    这是一个win32的dll
    头文件
    #ifdef EVENTDLLTEST_EXPORTS
    #define EVENTDLLTEST_API __declspec(dllexport)
    #else
    #define EVENTDLLTEST_API __declspec(dllimport)
    #endif
    typedef int (WINAPI *PFCALLBACK)(int Param) ;//声明一个返回值为int,传入参数为一个int的指向函数的指针。
    HANDLE hEvent;//事件句柄
    HANDLE hReadThread;//线程句柄extern "C" void EVENTDLLTEST_API  SetCallBackHandle(PFCALLBACK Func);//导出的函数cpp文件:
    #include "stdafx.h"
    #include "EventDLLTest.h"BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
        switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
        }
        return TRUE;
    }PFCALLBACK gCallBack = NULL;ULONG  WINAPI ThreadProc(LPVOID Param)
    { WaitForSingleObject(hEvent,INFINITE);
              //do some work
    MessageBox(NULL,"CallBack Function!",NULL, MB_OK);
    gCallBack(1);
    return 0L;
    }EVENTDLLTEST_API void SetCallBackHandle(PFCALLBACK Func)
    {
    if(Func==NULL)return;
             gCallBack=Func;
    DWORD flag;
    hReadThread = CreateThread(NULL, 0, ThreadProc, LPVOID(0), CREATE_SUSPENDED, &flag);
    ResumeThread(hReadThread);
    long i = 0;
    long j = 0;
    for(i=0;i<10000000;i++)
    {
    j++;
    }
    SetEvent(hEvent);
    }