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

gfh21cn 2004-04-30 12:49:46
环境: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成功
};
哎,还就对了,值全部传对了。
问题虽然解决了,但是还是想不通是何道理。
...全文
73 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chifengwatch 2004-05-02
  • 打赏
  • 举报
回复
up
jemyzhang 2004-05-01
  • 打赏
  • 举报
回复
data alinment?
GeoPhoenix 2004-05-01
  • 打赏
  • 举报
回复
这是否是内存对齐方式的原因造成的,你选字节对齐模式试一下
robbyzi 2004-05-01
  • 打赏
  • 举报
回复
真的如楼主所说的那样吗?

我还真的没有遇过哦。

呵呵
windindance 2004-04-30
  • 打赏
  • 举报
回复
-_-|没事起这么长的名字干什么。:)
gfh21cn 2004-04-30
  • 打赏
  • 举报
回复
呵呵,结构名称写错了SOutput_MotorBeltSelection->SOutput
TomSonChina 2004-04-30
  • 打赏
  • 举报
回复
帮你顶
jiangchun_xn 2004-04-30
  • 打赏
  • 举报
回复

我不会读阿
kwokwinglau 2004-04-30
  • 打赏
  • 举报
回复
借分。
gfh21cn 2004-04-30
  • 打赏
  • 举报
回复
呵呵,一看就清楚是什么

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧