以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  [求助]调用DLL中函数,传入参数,但参数值未有变化  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=167544)

--  作者:thsimong
--  发布时间:2019/1/7 11:14:31
--  [求助]调用DLL中函数,传入参数,但参数值未有变化
调用DLL,可以正常调用其中的方法,但传入的参数值并未发生预期变化,默认传入参数是按地址传递的不是吗?我在变量前添加byref,提示语法错误。我的写法是:myaddin.jisuan(ByRef a1,ByRef a2)。请问我如何才能让参数在经过jisuan函数运行后得到相应的改变。
--  作者:无为剑
--  发布时间:2019/1/7 16:13:40
--  
你用C++开的ACTIVEX控件,然后用VBA调用的吗?
建议提供更多的问题细节和描述

--  作者:thsimong
--  发布时间:2019/1/7 16:21:37
--  
是的。dll是根据论坛给的mode开发的,dll没问题,函数可以正常调用
--  作者:thsimong
--  发布时间:2019/1/7 16:24:37
--  
传递变量给调用的函数,在函数中进行运算,期待调用结束后变量的值会发生相应的变化。但实际上却没有,猜测是不是传递的参数是按值传递的?那如何才能按引用传递呢?我在参数前加byref 或“&”都被提示语法错误。
--  作者:无为剑
--  发布时间:2019/1/7 16:58:56
--  
运算结果建议通过函数返回传递,不要使用参数传递返回值。
如果你非要用参数返回,参数必须是VARIANT*类型的才可以,这方面的内容已经超出金字塔论坛的客服范畴,建议你去专门的C++的服务社区咨询
[此贴子已经被作者于2019/1/7 16:59:18编辑过]

--  作者:thsimong
--  发布时间: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
--  发布时间: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
--  发布时间:2019/1/7 18:21:25
--  
进一步搞清楚了问题,说传入参数类型不匹配。这咋整,若在vba中如下定义变量:private a1 as integer,又不能通过。咋整。 
--  作者:thsimong
--  发布时间:2019/1/7 18:31:26
--  
在调用函数前使用CInt()强制转换类型,依然结果不对