特别奇怪的问题,写出来通知一下,防止再出现类似错误,究竟是何原因,还请高手指点
环境: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成功
};
哎,还就对了,值全部传对了。
问题虽然解决了,但是还是想不通是何道理。
一个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成功
};
哎,还就对了,值全部传对了。
问题虽然解决了,但是还是想不通是何道理。
...全文
相关推荐
解决在SQL脚本中的注释引起的奇怪问题
然而,有时候在SQL脚本中添加注释可能会引发一些意外的问题,特别是在使用osql.exe工具时可能会遇到一些不直观的错误提示。
奇怪的C语言特性
C语言中存在着许多奇怪的特性,这些特性需要我们小心和掌握,否则可能会出现错误。同时,这些特性也可以帮助我们更好地理解C语言的工作机理和编程思想。
StrangeDay:工地代码奇怪的一天
综上所述,“StrangeDay:工地代码奇怪的一天”可能是开发者在使用EJS模板引擎时遇到的一系列问题的总结,通过了解EJS的基本概念、语法、与Express的结合,以及如何调试和解决问题,我们可以更好地应对类似的情况
Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例
同时,保持数据库软件的最新补丁级别也是很重要的,因为很多错误可能已经通过补丁得到了修复。在使用Data Pump时,为了防止和解决类似问题,有以下几点最佳实践:1.
一个applicationContext 加载错误导致的阻塞问题及解决方法
这个问题看起来很奇怪,让我们来看一下是如何解决的。问题分析在分析这个问题时,我们发现应用程序的 applicationContext 加载错误是导致的问题。


