以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  高级功能研发区  (http://222.73.7.161/bbs/list.asp?boardid=5)
----  关于VBA和C++的混合编程  (http://222.73.7.161/bbs/dispbbs.asp?boardid=5&id=97432)

--  作者:zyyh
--  发布时间:2016/5/14 16:34:26
--  关于VBA和C++的混合编程
原帖子 是这个 http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=11505
我试验到了 

Sub Test()
Dim MyAddin \'创建一个变量

Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")
MyAddin.MyTest(400)

End Sub


这个已经试验成功了,成功之后就困惑了  

MyAddin.MyTest(canshu)  

这个参数必须是常量啊  数组啊,变量啊  包括两个常量都传递不进去,非常像线程的传递参数,但是限制比线程的传递参数还多。

请问下 是我理解有问题 还是测试有问题  或者说  金字塔本身不支持这样的结构


--  作者:王锋
--  发布时间:2016/5/14 17:37:55
--  

变量传递不过去啥意思?报什么错?

可否问题描述的详细一些?


--  作者:zyyh
--  发布时间:2016/5/14 20:15:01
--  

Sub Test()
Dim MyAddin \'创建一个变量

Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")

dim a

a=400
MyAddin.MyTest(a)

End Sub

就会报错 报错是类型不匹配

Sub Test()
Dim MyAddin \'创建一个变量

Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")

dim a,b

a=400

b=300
MyAddin.MyTest(a,b)

End Sub

报错 就是 SUB过程里面 不允许传递括号,若改成 msgbox MyAddin.MyTest(a,b)  就会报错为 a.mytest 参数错误



--  作者:zyyh
--  发布时间:2016/5/14 20:20:03
--  

Sub Test()
Dim MyAddin \'创建一个变量

Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")

MyAddin.MyTest(400)

End Sub

就是正确的

Sub Test()
Dim MyAddin \'创建一个变量

Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")

dim a

a=400
MyAddin.MyTest(a)

msgbox 11

End Sub

就是什么都不管  也不执行下去  msgbox 都不执行了



--  作者:王锋
--  发布时间:2016/5/15 17:42:14
--  

使用系统自带的C++范例编译的的Activex控件测试,未发现你说的4楼的情况

至于3楼你的描述,我们不清楚你的C++代码中的接口是如何定义的,只要类型匹配是不会报这种错的,建议你还是多检查你的C++代码


--  作者:zyyh
--  发布时间:2016/5/16 14:07:05
--  
其它问题 都解决了 原因是因为变量采用了自动的变量,VB6.0  但是那个数组 实在不知道该怎么传,能否写下示例 

Sub Test()
Dim MyAddin \'创建一个变量

Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")

dim a(),b()

redim a(1)

a(0)=1

a(1)=2

\'要求此处传递一个数组进去 返回一个数组出来

b=MyAddin.MyTest(a)

End Sub


谢啦


--  作者:pel46585
--  发布时间:2016/5/16 14:24:59
--  
你传递数组的写法没有错。
 float VBSAddin::MyTest(double Value) 
{
 CString strValue;
 strValue.Format("%f",Value);
 AfxMessageBox(strValue);
 return 0.0f;
}
参数是DOUBLE,你非要传递数组过去,当然出错了。
修改C++部分就OK了 

--  作者:zyyh
--  发布时间:2016/5/16 14:46:22
--  
我自己搞定了  我确实传递数组进去了  并且能够传递出来  采用的不是C++ 而是 VB6.0
--  作者:zyyh
--  发布时间:2016/5/16 14:48:15
--  
原因是因为 VBA采用了 自动变量 
--  作者:王锋
--  发布时间:2016/5/16 15:03:29
--  

我们只有C++的数组传递方案,没有VB6的