Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共5 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
thsimong 发表于: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楼
无为剑 发表于: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中调用并可以返回被修改的变量。
3楼
thsimong 发表于:2019/1/9 11:25:30
demo是用c++写的。可是,按您说的,我改成VARIANT* ,提示说语法不对啊。咋整?编译错误提示1002
4楼
无为剑 发表于:2019/1/9 18:06:11
感觉您对C++的COM编写的能力还有待提高,您可以网上继续学习相关的资料,对于C++的客服工作,你目前的需求已经超过了我们的服务范围了
5楼
thsimong 发表于:2019/1/9 22:06:11
无关c++问题。是按你说的,vba中改写成MyTest(VARIANT* kaidan1, VARIANT* kaidan2,VARIANT* kaidan3)  ,提示有语法错误
共5 条记录, 每页显示 10 条, 页签: [1]


Powered By Dvbbs Version 8.3.0
Processed in 0.02344 s, 4 queries.