在vc里面调用DLL 中的函数,运行后出现内存报错解决思路
在vc里面调用DLL 中的函数,运行后出现内存报错
买的kenyence激光位移传感器,提供的usb驱动 .DLL .h .lib文件
我用静态加载上去。
在vc中调用BOOL WINAPI LKIF_GetCalcData(OUT LKIF_FLOATVALUE *CalcData1,OUT LKIF_FLOATVALUE *CalcData2)函数去得到测量值。
下面是函数的说明:
BOOL WINAPI LKIF_GetCalcData(OUT LKIF_FLOATVALUE *CalcData1,OUT LKIF_FLOATVALUE *CalcData2);
Description Returns the measurement value.
Parameter CalcData1 Measurement value for OUT1. Values are specified for the following structures.
CalcData2 Measurement value for OUT2. Values are specified for the following structures.
typedef enum {
LKIF_FLOATRESULT_VALID, // valid data
LKIF_FLOATRESULT_RANGEOVER_N, // over range at negative (-) side
LKIF_FLOATRESULT_WAITING, // comparator result
} LKIF_FLOATRESULT;
typedef struct {
LKIF_FLOATRESULT FloatResult; // valid or invalid data.
float Value; // measurement value during LKIF_FLOATRESULT_VALID.
Any other times will return an invalid value.
} LKIF_FLOATVALUE;
Returned Value TRUE Completes without errors
FALSE Completes with errors
下面是我在vc里面写的
[code=C/C++][/code]void CLasercontroldemoDlg::OnGetCalcData()
{
// TODO: Add your control notification handler code here
LKIF_FLOATVALUE *Data1;
LKIF_FLOATVALUE *Data2;
CString str;
if ( LKIF_GetCalcData( Data1, Data2) == TRUE )
{
if ( LKIF_FLOATRESULT_VALID == Data1->FloatResult)
{
str.Format("%f",Data1->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,str);
}
else if (LKIF_FLOATRESULT_RANGEOVER_P==Data1->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,"over range at positive (+) side");
}
else if (LKIF_FLOATRESULT_RANGEOVER_N==Data1->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,"over range at positive (-) side");
}
else if (LKIF_FLOATRESULT_WAITING==Data1->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,"comparator result");
}
else
{
str.Format("%f",Data1->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,str);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
if ( LKIF_FLOATRESULT_VALID == Data2->FloatResult)
{
str.Format("%f",Data2->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,str);
}
else if (LKIF_FLOATRESULT_RANGEOVER_P==Data2->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,"over range at positive (+) side");
}
else if (LKIF_FLOATRESULT_RANGEOVER_N==Data2->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,"over range at positive (-) side");
}
else if (LKIF_FLOATRESULT_WAITING==Data2->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,"comparator result");
}
else
{
str.Format("%f",Data2->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,str);
}
::AfxMessageBox("LKIF_GetCalcData ended normally.");
}
else
::AfxMessageBox("LKIF_GetCalcData terminated abnormally.");
}
运行就直接显示LKIF_GetCalcData terminated abnormally。都没有正确的函数返回,
厂商给了个vb的程序,程序是可以的。
望各位大虾帮我看下怎么回事,
------解决方案--------------------
LKIF_FLOATVALUE *Data1 = new LKIF_FLOATVALUE;
LKIF_FLOATVALUE *Data2 = new LKIF_FLOATVALUE;
CString str;
if ( LKIF_GetCalcData(OUT Data1,OUT Data2) == TRUE )
买的kenyence激光位移传感器,提供的usb驱动 .DLL .h .lib文件
我用静态加载上去。
在vc中调用BOOL WINAPI LKIF_GetCalcData(OUT LKIF_FLOATVALUE *CalcData1,OUT LKIF_FLOATVALUE *CalcData2)函数去得到测量值。
下面是函数的说明:
BOOL WINAPI LKIF_GetCalcData(OUT LKIF_FLOATVALUE *CalcData1,OUT LKIF_FLOATVALUE *CalcData2);
Description Returns the measurement value.
Parameter CalcData1 Measurement value for OUT1. Values are specified for the following structures.
CalcData2 Measurement value for OUT2. Values are specified for the following structures.
typedef enum {
LKIF_FLOATRESULT_VALID, // valid data
LKIF_FLOATRESULT_RANGEOVER_N, // over range at negative (-) side
LKIF_FLOATRESULT_WAITING, // comparator result
} LKIF_FLOATRESULT;
typedef struct {
LKIF_FLOATRESULT FloatResult; // valid or invalid data.
float Value; // measurement value during LKIF_FLOATRESULT_VALID.
Any other times will return an invalid value.
} LKIF_FLOATVALUE;
Returned Value TRUE Completes without errors
FALSE Completes with errors
下面是我在vc里面写的
[code=C/C++][/code]void CLasercontroldemoDlg::OnGetCalcData()
{
// TODO: Add your control notification handler code here
LKIF_FLOATVALUE *Data1;
LKIF_FLOATVALUE *Data2;
CString str;
if ( LKIF_GetCalcData( Data1, Data2) == TRUE )
{
if ( LKIF_FLOATRESULT_VALID == Data1->FloatResult)
{
str.Format("%f",Data1->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,str);
}
else if (LKIF_FLOATRESULT_RANGEOVER_P==Data1->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,"over range at positive (+) side");
}
else if (LKIF_FLOATRESULT_RANGEOVER_N==Data1->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,"over range at positive (-) side");
}
else if (LKIF_FLOATRESULT_WAITING==Data1->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,"comparator result");
}
else
{
str.Format("%f",Data1->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result1,str);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
if ( LKIF_FLOATRESULT_VALID == Data2->FloatResult)
{
str.Format("%f",Data2->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,str);
}
else if (LKIF_FLOATRESULT_RANGEOVER_P==Data2->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,"over range at positive (+) side");
}
else if (LKIF_FLOATRESULT_RANGEOVER_N==Data2->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,"over range at positive (-) side");
}
else if (LKIF_FLOATRESULT_WAITING==Data2->FloatResult)
{
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,"comparator result");
}
else
{
str.Format("%f",Data2->Value);
SetDlgItemText(IDC_STATIC_GetCalcData_Result2,str);
}
::AfxMessageBox("LKIF_GetCalcData ended normally.");
}
else
::AfxMessageBox("LKIF_GetCalcData terminated abnormally.");
}
运行就直接显示LKIF_GetCalcData terminated abnormally。都没有正确的函数返回,
厂商给了个vb的程序,程序是可以的。
望各位大虾帮我看下怎么回事,
------解决方案--------------------
LKIF_FLOATVALUE *Data1 = new LKIF_FLOATVALUE;
LKIF_FLOATVALUE *Data2 = new LKIF_FLOATVALUE;
CString str;
if ( LKIF_GetCalcData(OUT Data1,OUT Data2) == TRUE )