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

问题描述

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"..debugDLL_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 = %dn", result);
int *k;-----------------------------------这行和下面的一行,也不对,不知道怎么才行。。
k=addFun1();------------------------
printf("add1中的a[1]的结果是: %dn", *(k+1));
system("pause");
}
FreeLibrary(hDll);
}
return 0;
}[/code]

解决方案

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

解决方案二:

返回指针,你直接用一个对应类型变量接受处理就可以了。你的static类型只有保证使用的时候还有效就可以了

解决方案三:

还是不太明白,最好能直接给出修改后的代码。谢谢

时间: 2016-04-01
Tags:

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

Shell中函数返回值超出问题

  这篇文章主要介绍了Shell中函数返回值超出问题,shell中通过return返回是有限制的,最大返回255,超过255,则从0开始计算,需要的朋友可以参考下 1.前言 快半年没有写博客了,荒废了很久,工作中的杂事太多,自己越来越懒了.为了鞭策自己成长,还是要坚持写写博客,记录自己的成长. 2.shell函数介绍 语法: 代码如下: [ function ] funname [()] { action; [return int;] } 说明: (1)可以带function fun() 定义,

调用函数-怎样将二维数组作为函数返回值并在主函数中调用

问题描述 怎样将二维数组作为函数返回值并在主函数中调用 我的调用函数是这样的:float(*TIME(float f_1[3][100]))[100]{ for(i=0;i<=2;i++) { L_1[i][0]=-(a_1*f_1[i][0-3+100]+a_2*f_1[i][0-2+100]+a_3*f_1[i][0-1+100]+a_4*f_1[i][0]+a_5*f_1[i][0+1]+a_6*f_1[i][0+2]); L_1[i][1]=-(a_1*f_1[i][1-3+100]+a

函数调用-c语言中函数返回值类型的问题

问题描述 c语言中函数返回值类型的问题 看一道改错题: #include #include #include proc(int k)//很显然根据主调函数和返回值类型知道这里缺少类型 { int n;float s,w,p,q; n=1; s=1.0; while(n<=k){ w=2.0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n++; } return s; } void main(){ system("CLS"); printf("%f

js jax 函数-js中Ajax返回的值怎么当函数返回值供别的函数调用?

问题描述 js中Ajax返回的值怎么当函数返回值供别的函数调用? 如上图代码 我调用时返回的是undefined 解决方案 改为同步,而且你的回调里面返回值没用,并不是你的getTotalIntegral的返回值,还有以后代码,不要发截图.看桌就烦 function getTotalIntegral(){ //...原来的代码 var rst=false; $.ajax({ async:false,/////////////同步 success:function(data){ if(data.s

JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法_javascript技巧

本文实例讲述了JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法.分享给大家供大家参考,具体如下: 主页面: <script type="text/javascript"> function SelectGroupCust() { var temp = window.showModalDialog("Default2.aspx?xx=" + Date(), "", "dialog

SQLite中sqlite3_column_value()的返回值

sqlite3_column_value()的返回对象是一个 unprotected sqlite3_value 对象.一个不受保护的sqlite3_value object可能只能用于sqlite3_bind_value() 和sqlite3_result_value().如果一个unprotected sqlite3_value 对象( sqlite3_column_value()函数的返回值) 被用在其他地方,包括调用如 sqlite3_value_int(), sqlite3_value

python读取oracle函数返回值_python

在oracle中创建一个函数,本来是想返回一个index table的,没有成功.想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式. 考虑到返回数据量可能会很大,varchar2类型长度吃紧,于是将返回值类型设置为clob.  我是用scott用户的测试表emp,这个是函数定义情况: create or replace function test_query_func(dept varchar2) return clob is type test_record is record (

《C++面向对象高效编程(第2版)》——3.15 函数返回值

3.15 函数返回值 C++面向对象高效编程(第2版)许多函数向主调函数返回值.引用或指针.要正确和高效地使用它们,必须先理解它们的含义.可能有以下几种模式返回: T X::f(); // 按值返回T T* X::f(); // 返回T类对象的指针/地址 const T* X::f(); // 返回指向const T类对象的指针 T& X::f(); // 返回对T对象的引用 const T& X::f(); // 返回对const T类对象的引用``` (1)绝不返回对局部变量的引用(或

javascript-如何调用JavaScript中confirm()的返回值?

问题描述 如何调用JavaScript中confirm()的返回值? 大家好!我是一名JavaScript初学者,没有其他语言基础,在学习中,我想先对这门语言有一个宏观纵览,有了编程的思路,再回到细节中夯实基本功,以避免"淹死"到那些术语和细节中 我想实现这样一个功能: 1.利用prompt()函数让用户输入姓名 2.利用confirm()函数判断用户的性别 3.confirm()返回真,则alart()显示"你好,××先生! 反之,显示"你好,××女士!"