我也在考虑这个问题啊,我开始用的是一个结构体,在测试的时候参数可以正确的传递到DLL中,但是放到实际工程的时候,参数却传不进去了,不知道为什么?大家帮帮看看啊。
dll中:
struct METERTY
{
char szUserNo[16]; //户号
char szBureauID[20]; // 局编号
char szFactoryID[20]; // 出厂号
char szMeterType[40]; // 型号
char szMeterName[64]; //表计名称
char szAddr485[13]; // 485地址
WORD PT; // PT
WORD CT; // CT
char szMeterConstant[6]; //表常数
WORD wMeterID; //表计类型
WORD SSLX; //示数类型
WORD ZCBZ; //装拆标志
WORD CBRQ; //抄表日期
};
extern "C" __declspec(dllexport) bool Show(METERTY &ac) // 导出返回值为空的Show()函数
{
AFX_MANAGE_STATE(AfxGetAppModuleState());
AcceDlg dlg;
dlg.aaa=ac.PT;//测试的时候传来的是正确的,可实际工程中却传不进去
dlg.DoModal();}
调用DLL的程序:
struct METERTY
{
char szUserNo[16]; //户号
char szBureauID[20]; // 局编号
char szFactoryID[20]; // 出厂号
char szMeterType[40]; // 型号
char szMeterName[64]; //表计名称
char szAddr485[13]; // 485地址
WORD PT; // PT
WORD CT; // CT
char szMeterConstant[6]; //表常数
WORD wMeterID; //表计类型
WORD SSLX; //示数类型
WORD ZCBZ; //装拆标志
WORD CBRQ; //抄表日期
};
METERTY ac;
ac.PT=3;
typedef bool (* CallDll)(METERTY &);
HINSTANCE hmod;
hmod = ::LoadLibrary ("Access.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
CallDll lpproc;
lpproc = (CallDll)GetProcAddress (hmod,"Show");
if(lpproc != NULL)
{
if((*lpproc)(ac)==true)
{
MessageBox("成功");
}
}
FreeLibrary(hmod);
}
dll中:
struct METERTY
{
char szUserNo[16]; //户号
char szBureauID[20]; // 局编号
char szFactoryID[20]; // 出厂号
char szMeterType[40]; // 型号
char szMeterName[64]; //表计名称
char szAddr485[13]; // 485地址
WORD PT; // PT
WORD CT; // CT
char szMeterConstant[6]; //表常数
WORD wMeterID; //表计类型
WORD SSLX; //示数类型
WORD ZCBZ; //装拆标志
WORD CBRQ; //抄表日期
};
extern "C" __declspec(dllexport) bool Show(METERTY &ac) // 导出返回值为空的Show()函数
{
AFX_MANAGE_STATE(AfxGetAppModuleState());
AcceDlg dlg;
dlg.aaa=ac.PT;//测试的时候传来的是正确的,可实际工程中却传不进去
dlg.DoModal();}
调用DLL的程序:
struct METERTY
{
char szUserNo[16]; //户号
char szBureauID[20]; // 局编号
char szFactoryID[20]; // 出厂号
char szMeterType[40]; // 型号
char szMeterName[64]; //表计名称
char szAddr485[13]; // 485地址
WORD PT; // PT
WORD CT; // CT
char szMeterConstant[6]; //表常数
WORD wMeterID; //表计类型
WORD SSLX; //示数类型
WORD ZCBZ; //装拆标志
WORD CBRQ; //抄表日期
};
METERTY ac;
ac.PT=3;
typedef bool (* CallDll)(METERTY &);
HINSTANCE hmod;
hmod = ::LoadLibrary ("Access.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
CallDll lpproc;
lpproc = (CallDll)GetProcAddress (hmod,"Show");
if(lpproc != NULL)
{
if((*lpproc)(ac)==true)
{
MessageBox("成功");
}
}
FreeLibrary(hmod);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货