欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → [求助]调用DLL中函数,传入参数,但参数值未有变化

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3148人关注过本帖树形打印复制链接

主题:[求助]调用DLL中函数,传入参数,但参数值未有变化

帅哥哟,离线,有人找我吗?
thsimong
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
[求助]调用DLL中函数,传入参数,但参数值未有变化  发帖心情 Post By:2019/1/7 11:14:31 [只看该作者]

调用DLL,可以正常调用其中的方法,但传入的参数值并未发生预期变化,默认传入参数是按地址传递的不是吗?我在变量前添加byref,提示语法错误。我的写法是:myaddin.jisuan(ByRef a1,ByRef a2)。请问我如何才能让参数在经过jisuan函数运行后得到相应的改变。

 回到顶部
帅哥哟,离线,有人找我吗?
无为剑
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:2437 积分:0 威望:0 精华:0 注册:2016/3/5 22:53:41
  发帖心情 Post By:2019/1/7 16:13:40 [只看该作者]

你用C++开的ACTIVEX控件,然后用VBA调用的吗?
建议提供更多的问题细节和描述

 回到顶部
帅哥哟,离线,有人找我吗?
thsimong
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
  发帖心情 Post By:2019/1/7 16:21:37 [只看该作者]

是的。dll是根据论坛给的mode开发的,dll没问题,函数可以正常调用

 回到顶部
帅哥哟,离线,有人找我吗?
thsimong
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
  发帖心情 Post By:2019/1/7 16:24:37 [只看该作者]

传递变量给调用的函数,在函数中进行运算,期待调用结束后变量的值会发生相应的变化。但实际上却没有,猜测是不是传递的参数是按值传递的?那如何才能按引用传递呢?我在参数前加byref 或“&”都被提示语法错误。

 回到顶部
帅哥哟,离线,有人找我吗?
无为剑
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:2437 积分:0 威望:0 精华:0 注册:2016/3/5 22:53:41
  发帖心情 Post By:2019/1/7 16:58:56 [只看该作者]

运算结果建议通过函数返回传递,不要使用参数传递返回值。
如果你非要用参数返回,参数必须是VARIANT*类型的才可以,这方面的内容已经超出金字塔论坛的客服范畴,建议你去专门的C++的服务社区咨询
[此贴子已经被作者于2019/1/7 16:59:18编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
thsimong
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
  发帖心情 Post By:2019/1/7 17:08:15 [只看该作者]

我函数是这么写的
int jisuan(int v1, int v2,int v3)
{
v1=v2+v3;
v2=v1+v3;
v3=v1+v2;
return v1;
}

在VBA中进行调用,比如
fanhui = xx.jisuan(a1,a2,a3)

打印发现fanhui,a1,a2,a3这几个变量的值都没有改变,都还是原来初始化的值。

 回到顶部
帅哥哟,离线,有人找我吗?
thsimong
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
  发帖心情 Post By:2019/1/7 17:51:09 [只看该作者]

麻烦您再帮看看,谢谢!
dll中的函数我是这么写的
int jisuan(int v1, int v2,int v3)
{
v1=v2+v3;
v2=v1+v3;
v3=v1+v2;
return v1;
}

在VBA中进行调用,比如
fanhui = xx.jisuan(a1,a2,a3)

打印发现fanhui,a1,a2,a3这几个变量的值都没有改变,都还是原来初始化的值。


 回到顶部
帅哥哟,离线,有人找我吗?
thsimong
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
  发帖心情 Post By:2019/1/7 18:21:25 [只看该作者]

进一步搞清楚了问题,说传入参数类型不匹配。这咋整,若在vba中如下定义变量:private a1 as integer,又不能通过。咋整。 

 回到顶部
帅哥哟,离线,有人找我吗?
thsimong
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
  发帖心情 Post By:2019/1/7 18:31:26 [只看该作者]

在调用函数前使用CInt()强制转换类型,依然结果不对

 回到顶部