特别奇怪的问题,写出来通知一下,防止再出现类似错误,究竟是何原因,还请高手指点
环境:CB6专业版+Win2000
一个EXE和一个DLL
DLL是用于计算选型(返回多个记录),为了防止内存在分配、使用和释放的错误(DLL里面分配,EXE里面使用和释放,这样容易产生错误),我定义了一个函数指针
并作为参数传进DLL中,只要一产生记录就调用该函数返回给EXE
[定义]
typedef void Fun_AddResult_MotorBelt(SOutput &Data);
struct SOutput
{
char MotModeID[30];//电机型号
char BeltType[6];//皮带类型
int BeltCount;
int Pole;
double MPow;//电机功率
double MSped;//电机转速
.....//这里有很多个DOUBLE型
double BeltVelocity;//皮带运动速度
bool CenterSpaceMatchResult;//中心距匹配结果 false不成功 true成功
};
[使用]
void AddMotorBeltResult(SOutput &pData)
{
gBeltSelectionResultData.Add(pData);//这里面先分配内存然后用memcpy拷贝,所以不会涉及上面(分配、使用和释放)的问题
}
DLL_MotorBeltSelction(gInput_MotorBeltSelection,*FanSelection,AddMotorBeltResult);//这里传进去
然而,我在调试中发现double类型前的值都传对了,后面的double值都传错了(出现负多少次方,总之是错误的)
怎么想也想不明白,后来把这个结构的定义重新排了一下(把double型放到前面)
struct SOutput_MotorBeltSelection
{
double MPow;//电机功率
double MSped;//电机转速
.....//这里有很多个DOUBLE型
double BeltVelocity;//皮带运动速度
char MotModeID[30];//电机型号
char BeltType[6];//皮带类型
int BeltCount;
int Pole;
bool CenterSpaceMatchResult;//中心距匹配结果 false不成功 true成功
};
哎,还就对了,值全部传对了。
问题虽然解决了,但是还是想不通是何道理。