特别奇怪的问题,写出来通知一下,防止再出现类似错误,究竟是何原因,还请高手指点

gfh21cn gfh21cn 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
环境: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成功
};
哎,还就对了,值全部传对了。
问题虽然解决了,但是还是想不通是何道理。
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
gfh21cn
C++ Builder 13,871 成员 102,696 内容