zlname 2015-10-17 14:56 采纳率: 25%
浏览 1749

c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数。

[code=c]extern "C" int __declspec(dllexport)add(int x, int y);
extern "C" int __declspec(dllexport)*add1();
int add(int x, int y)
{
return x + y;
}
int *add1()
{
static int a[3]={1,2,3};
static int *p;
p=a;
return p;
}
[/code]
---------------------------------------------------------------------------以上为DLL_test.dll文件内容,以下为Main主程序
[code=c]#include
#include

typedef int(*lpAddFun)(int, int); //宏定义函数指针类型
typedef int(*lpAddFun1)();???????????????????这里定义似乎不对,因为add1()返回值为指针,但又不知道正确的是怎么写。请帮忙指点
int main(int argc, char *argv[])
{
HINSTANCE hDll; //DLL句柄
lpAddFun addFun; //函数指针
lpAddFun1 addFun1;
hDll = LoadLibrary(L"..\debug\DLL_test.dll");
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, "add");
addFun1 = (lpAddFun1)GetProcAddress(hDll, "add1");???这里对吗
if (addFun != NULL)
{
int result = addFun(2, 3);
printf("2 + 3 = %d\n", result);
int *k;-----------------------------------这行和下面的一行,也不对,不知道怎么才行。。
k=addFun1();------------------------
printf("add1中的a[1]的结果是: %d\n", *(k+1));
system("pause");
}
FreeLibrary(hDll);
}
return 0;
}[/code]

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-10-17 15:41
    关注

    你想复杂了,返回的是指针,又不是函数指针,k=addFun1();就可以了。
    但是你的add函数本身有缺陷,它返回的是堆栈上变量的地址,这是不允许的。

    评论

报告相同问题?

悬赏问题

  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程