在dll中的代码:
DWORD _stdcall WriteComm(int i_hCom,char* buf, DWORD dwLength)
{
g_buf = buf;
g_hCom = i_hCom;
//fState=WriteFile(m_hCom,buf,length,&length,&m_osWrite);
if (dwLength>4)
{
TIMECAPS tc;
//获得定时器分辨率
if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR)
{
return 0;
}
UINT nResolution = min(max(tc.wPeriodMin, 1), tc.wPeriodMax); UINT nInterval = 1;
if (nInterval < nResolution)
{
nInterval = nResolution;
}
//设置定时最小分辨率
timeBeginPeriod(nResolution);
//设置定时器
GetLocalTime(&ss);
m_nTimerID = timeSetEvent(5, nResolution,CallBackFuncByFile,NULL, TIME_PERIODIC);
}
return 0;
}
在调用它的主程序中这样使用
HINSTANCE hInstance;
HANDLE m_hCom;
hInstance = LoadLibrary(_T("port_dll.dll"));
if (!hInstance)
{
AfxMessageBox(_T("Not Find this Dll"));
}
typedef HANDLE (_stdcall *openPort)(int);
openPort OpenConnection = (openPort) GetProcAddress(hInstance,"OpenConnection");
typedef void (_stdcall * CLOSECONNECTION)(HANDLE);
CLOSECONNECTION CloseConnection = (CLOSECONNECTION) GetProcAddress(hInstance,"CloseConnection");
typedef DWORD (_stdcall * WRITECOMM)(int,char*, DWORD); WRITECOMM WriteComm = (WRITECOMM) GetProcAddress(hInstance,"WriteComm"); char* buf;
char a[10] = {1,2,3,4,5,1,2,3,4,5};
buf = a;WriteComm(5,buf,10);
FreeLibrary(hInstance);
它并不是在运行完回调函数关闭计时器后再调用FreeLibrary(hInstance);而是定时器运行到一半(可能只调用一次回调函数并没有关闭计时器)就开始运行到FreeLibrary(hInstance)然后再回去跑定时器导致程序错误,不知道各位大虾有什么建议吗?急等!!!!!
解决方案 »
- 为什么进不了codeproject????
- 一个关于多线程关键代码段的诡异问题!!
- mfc 读取文件和存取文件
- 我想把程序编译成一个Exe执行文件,而且想让当鼠标光标移动到这个文件图标上时就可以启动这个exe,请高手指点一下好吗?
- 请问用dao时,如何判断一个数据库是否存在?
- 再加40分问一下数据通信结构问题!
- 怎么从VB里面传递到ATL中一个字符串数组或者一个整形数组??
- --------------难道mpeg4视频流无法在网络中被保存?--------------
- mfc中使用了office xp中的word,把数据库中的数据导入到了其中.打包时需要加入word中的什么文件.我加入了office10.dll,
- Iocomp在VS2010->VC++->MFC中怎么使用?
- 求fo.h等头文件,好像是E-FORM++中的
- 用VC++做的中文版的应用程序,在日文XP系统下出现乱码
或者你自己用一个线程来定时