|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
制作动态链接库,定义了一个结构体函数 struct LKHDM FuncCalculatingHdm(CalHdmStruct &CalculatingHdm, bool bDuiQi, bool bLOrR, int &CalPointNum, double* pInDataX, double* pInDataY, int R400_Start, double* Dist_Hdmjd_L, double* Dist_Hdmjd_L_50 )
可是导出的地方老有问题,请问
extern "C" __declspec(dllexport) struct LKHDM FuncCalculatingHdm_1(CalHdmStruct &CalculatingHdm, bool bDuiQi, bool bLOrR, int &CalPointNum, double* pInDataX, double* pInDataY, int R400_Start, double* Dist_Hdmjd_L, double* Dist_Hdmjd_L_50)
{
return struct LKHDM FuncCalculatingHdm(CalculatingHdm, bDuiQi, bLOrR, CalPointNum, pInDataX, pInDataY, R400_Start, Dist_Hdmjd_L, Dist_Hdmjd_L_50 );
}
求教,这该如何去定义呢?
我不知道要怎么说才能说明白。函数不能返回结构体。
如下面这段代码:
typedef struct tagABC
{
long a;
long b;
long c[10];
}ABC,* LABC;
ABC getABC1()
{
ABC a = {10,20,30,40};
return a;
}
ABC _globalAbc;
ABC & getABC2()
{
_globalAbc.a = 10;
_globalAbc.b = 20;
_globalAbc.c[0] = 30;
_globalAbc.c[1] = 40;
return _globalAbc;
}
int main()
{
ABC a;
a = getABC1();
a = getABC2();
return 0;
}
调用getABC1(),和getABC2()得到的结果是一样的。
为什么?因为这是在一个模块里面,主调函数与被调函数用的是一个栈,
编译器可以优化getABC1()函数,所以能得到正确结果。
但是如果把getABC1写在DLL里,在别的地方调用,DLL与EXE用的不是同一个栈,
所以编译器无法优化你的代码。
所以,不要写成getABC1()这样,要写成getABC2()才行
|
|