请问在dll,可以写事件吗。 ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是比如说,我写一个DLL去读取串口数据,当从串口读到数据后,我想从DLL激活一个事件,激发DLL的调用者执行相应的动作。 这是一个win32的dll头文件#ifdef EVENTDLLTEST_EXPORTS#define EVENTDLLTEST_API __declspec(dllexport)#else#define EVENTDLLTEST_API __declspec(dllimport)#endiftypedef 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);} 0x004048dc 处未处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突 消息框和窗体显示顺序 只有HXX和DLL,没有LIB,如何连接? API函数和成员函数的区别???? ATL server 需要哪个DLL的支持 openGL和双缓存 新年了,注意身体呀!认为对的话,就来UP吧! 知道父窗口句柄,如何截获内部消息 怎么样才能把CView的SDI工程转换成CEditView的SDI工程?? udp设置为非阻塞后,接收数据的问题。 昨天买了本《Windows程序设计》第五版,北京大学出版,160 RMB [请教]一个VC的问题,总是报告头文件有错
头文件
#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);
}