以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 关于VBA和C++的混合编程 (http://weistock.com/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() Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin") End Sub 这个已经试验成功了,成功之后就困惑了 MyAddin.MyTest(canshu) 这个参数必须是常量啊 数组啊,变量啊 包括两个常量都传递不进去,非常像线程的传递参数,但是限制比线程的传递参数还多。 请问下 是我理解有问题 还是测试有问题 或者说 金字塔本身不支持这样的结构 |
-- 作者:王锋 -- 发布时间:2016/5/14 17:37:55 -- 变量传递不过去啥意思?报什么错? 可否问题描述的详细一些? |
-- 作者:zyyh -- 发布时间:2016/5/14 20:15:01 -- Sub Test() Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin") dim a a=400 End Sub 就会报错 报错是类型不匹配 Sub Test() Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin") dim a,b a=400 b=300 End Sub 报错 就是 SUB过程里面 不允许传递括号,若改成 msgbox MyAddin.MyTest(a,b) 就会报错为 a.mytest 参数错误 |
-- 作者:zyyh -- 发布时间:2016/5/14 20:20:03 -- Sub Test() Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin") MyAddin.MyTest(400) End Sub 就是正确的 Sub Test() Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin") dim a a=400 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() 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的 |