一个关于VC6中调用DLL失败后续处理的有关问题

一个关于VC6中调用DLL失败后续处理的问题
以下这段代码每100ms执行一次:
try
{
SenDll::senReadDSPData2(temp_SensorTimeTag,temp_channelData); 
}
catch(...)
{
isok=false;
dwErrCode = GetLastError();
sFuncName = "SEN_ReadDSPData";
CErrorLog::WriteLog(dwErrCode, sFuncName);
}
它的用处是调用Dll中的一个读取硬件设备数据的函数(参见下文SenDll代码)。

现在遇到的问题是:
  当一次执行SenDll::senReadDSPData2失败时(比如设备连接断线),在以后的执行周期都后通统失败,即使故障已经恢复了(比如断开的硬件又连接上了)也然try失败进入catch流程。

请问:
  1、上文这样的写法合理吗?
  2、有没有调用Dll失败后,在后面的代码执行时能保证再次调用该dll的办法(即不受上次调用失败的影响)。

谢谢!

附:以下是SenDll.cpp的代码
#include "SenDll.h"
extern stDLL_CHANNEL_LIST g_channelData[11];//rock
extern stDLL_SensorTimeTag g_SensorTimeTag[150];//rock
extern stDLL_CHANNEL_LIST temp_channelData[11];//rock
extern stDLL_SensorTimeTag temp_SensorTimeTag[150];//rock
lpWaveToStrain SenDll::senWaveToStrain;
HMODULE SenDll::senModule;
lpInitFunc SenDll::senInit;
lpCloseFunc SenDll::senClose;
lpReadDataFunc SenDll::senReadDSPData2;//rock
lpIsConnFunc SenDll::senIsConn;
lpWaveToTemp SenDll::senWaveToTemp;
lpSendParaData SenDll::senSendParaData;

bool SenDll::IniSenDll()
{
senModule = LoadLibrary("ReadData.dll");
if(senModule == NULL)
{
return false;
}
senInit = (lpInitFunc)GetProcAddress(senModule, "SEN_Init");
senClose = (lpCloseFunc)GetProcAddress(senModule, "SEN_Close");
senReadDSPData2 = (lpReadDataFunc)GetProcAddress(senModule,"SEN_ReadDSPData2");//rock
senIsConn = (lpIsConnFunc)GetProcAddress(senModule,"SEN_IsConnected");
senWaveToTemp = (lpWaveToTemp)GetProcAddress(senModule,"SEN_WaveToTemp");
senWaveToStrain = (lpWaveToStrain)GetProcAddress(senModule,"SEN_WaveToStrain");
senSendParaData = (lpSendParaData)GetProcAddress(senModule,"SEN_SendParaData");
SenDll::senInit();
return true;
}

void SenDll::ReleaseDll()
{
SenDll::senClose();
FreeLibrary(senModule);
return;
}

------解决方案--------------------
try 里面加条件判断 如果正常 执行 否则返回

还有你每次执行senReadDSPData2,参数和上次是否有关系

还有senReadDSPData2 里有没有静态变量 全局变量

是否有潜在的同步问题
------解决方案--------------------
同步就是两个东西不能同时访问一个资源

要等待对方完成 自己才能执行

最好把共享数据加锁