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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → [求助]金字塔的vba是否不能向ActiveX组件传递数组

   

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


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

主题:[求助]金字塔的vba是否不能向ActiveX组件传递数组

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


加好友 发短信
等级:新手上路 帖子:25 积分:0 威望:0 精华:0 注册:2017/3/13 14:34:13
[求助]金字塔的vba是否不能向ActiveX组件传递数组  发帖心情 Post By:2018/4/16 12:49:34 [只看该作者]

//vba代码

 

dim newprice(10) '定义一个一维数组,里面有10个浮点型数值
Dim MyAddin '创建一个变量

Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")

       MyAddin.ArrTest5(newprice)

 

//-------------------------------------------------

//c++编写的VBSAddin

//ArrTest5是用来接收这个数组,并把数组的数据类型显示出来。

 

LONG VBSAddin::ArrTest5(VARIANT &arr)  //这一行这样写是否有问题? 
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());

 

 

//显示数组的数据类型

    CString strValue;
            strValue.Format(L"%d",arr.vt);   //显示数组的数据类型
             AfxMessageBox(strValue);

 

 return 0;
}

 

运行结果: 要么显示0 , 要么显示超过10000的随机整数。 不能正确判断是哪一种数据类型。

 

附:  百度的资料:

 

//------------------------------------------

 

 

使用VARIANT来传递参数意味着非强类型语言(例如VBScript)能够调用使用强类型语言(C++)实现的方法。Invoke()方法的实现可以检查参数VARIANT封装的数值是否符合其正确的数据类型。如果符合,该类型将取出,并传递给调用方法。否则,Invoke()方法能够尝试使用 VariantChangeType()API函数来将该数值转换成正确的类型。


typedef unsigned short VARTYPE;
enum VARENUM
{ VT_EMPTY = 0,
VT_NULL = 1,
VT_I2 = 2,
VT_I4 = 3,
VT_R4 = 4,
VT_R8 = 5,
VT_CY = 6,
VT_DATE = 7,
VT_BSTR = 8,
VT_DISPATCH = 9,
VT_ERROR = 10,
VT_BOOL = 11,
VT_VARIANT = 12,
VT_UNKNOWN = 13,
VT_DECIMAL = 14,
VT_I1 = 16,
VT_UI1 = 17,
VT_UI2 = 18,
VT_UI4 = 19,
VT_I8 = 20,
VT_UI8 = 21,
VT_INT = 22,
VT_UINT = 23,
VT_VOID = 24,
VT_HRESULT = 25,
VT_PTR = 26,
VT_SAFEARRAY = 27,
VT_CARRAY = 28,
VT_USERDEFINED = 29,
VT_LPSTR = 30,
VT_LPWSTR = 31,
VT_RECORD = 36,
VT_INT_PTR = 37,
VT_UINT_PTR = 38,
VT_FILETIME = 64,
VT_BLOB = 65,
VT_STREAM = 66,
VT_STORAGE = 67,
VT_STREAMED_OBJECT = 68,
VT_STORED_OBJECT = 69,
VT_BLOB_OBJECT = 70,
VT_CF = 71,
VT_CLSID = 72,
VT_VERSIONED_STREAM = 73,
VT_BSTR_BLOB = 0xfff,
VT_VECTOR = 0x1000,
VT_ARRAY = 0x2000,
VT_BYREF = 0x4000,
VT_RESERVED = 0x8000,
VT_ILLEGAL = 0xffff,
VT_ILLEGALMASKED = 0xfff,
VT_TYPEMASK = 0xfff
} ;


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


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

该问题超出一般客户的服务范畴,需要研发人员回复,请耐心等待,不要重复发帖


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


加好友 发短信
等级:管理员 帖子:2437 积分:0 威望:0 精华:0 注册:2016/3/5 22:53:41
  发帖心情 Post By:2018/4/17 22:03:05 [只看该作者]


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


加好友 发短信
等级:新手上路 帖子:25 积分:0 威望:0 精华:0 注册:2017/3/13 14:34:13
  发帖心情 Post By:2018/4/19 22:57:21 [只看该作者]

谢谢,我有空的话再来认真看看这些帖子。

 回到顶部