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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → [求助]用demo制作DLL,VBA调用结果不对

   

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


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

主题:[求助]用demo制作DLL,VBA调用结果不对

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


加好友 发短信
等级:新手上路 帖子:19 积分:0 威望:0 精华:0 注册:2019/1/5 20:04:24
[求助]用demo制作DLL,VBA调用结果不对  发帖心情 Post By:2019/1/8 22:20:33 [只看该作者]

1.在MyActiveXdemo中,改写mytest函数,如下:
int  VBSAddin::MyTest(int kaidan1, int kaidan2,int kaidan3)
{
kaidan1 = kaidan1 + 100;
kaidan2 = kaidan2 + 100;
kaidan3 = kaidan3 + 100;
return 100;
}
并在def模块中添加 EXPORT mytest @1,
其他均承袭demo,未作修改
2. 在VBA中调用方式如下:
Dim MyAddin 

Set MyAddin = CreateObject("DynamicWrapper")
 
MyAddin.Register"MyActiveXDemo.DLL","MyTest","i=ttt","f=s","r=t"
   
fanhui= MyAddin.MyTest(kaiduodan1,kaiduodan2,kaiduodan3)

3.打印结果
变量初始值均为1,运行后,fanhui为空,其余三个参数均未改变,都为1。确定的是函数有被调用运行,确定方法是在test中添加AfxMessageBox函数,能正确弹出窗口。

4.疑惑问题
理论上调用函数后,各个参数的值应该分别为100,101,101,101才对啊。那么,问题出在哪呢?

斑竹或路过大神帮帮忙啊,好焦虑,好捉急。这个问题卡了好几天了。。。

跪谢。。。

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


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

1,C语言的参数是以复制方式传递的,你这么使用只能是当向的,不可能被修改后返回。若你希望参数在函数中修改,那么你需要将参数修改成指针,类似 int  VBSAddin::MyTest(int * kaidan1, int * kaidan2,int * kaidan3)。这么定义的参数在VBA中调用是很麻烦的,一般我们是通过VARIANT*类型来解决的,也就是你的参数要改成  MyTest(VARIANT* kaidan1, VARIANT* kaidan2,VARIANT* kaidan3)  ,这样就可以在VBA中调用并可以返回被修改的变量。

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


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

demo是用c++写的。可是,按您说的,我改成VARIANT* ,提示说语法不对啊。咋整?编译错误提示1002

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


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

感觉您对C++的COM编写的能力还有待提高,您可以网上继续学习相关的资料,对于C++的客服工作,你目前的需求已经超过了我们的服务范围了

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


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

无关c++问题。是按你说的,vba中改写成MyTest(VARIANT* kaidan1, VARIANT* kaidan2,VARIANT* kaidan3)  ,提示有语法错误

 回到顶部