社区
ATL
帖子详情
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
andyred
2004-11-11 05:04:13
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
ActiveX中的这个函数实际返回的是一个variant数组,长度不确定,请问我在vc中调用时应该
使用的参数类型是什么?我使用VARIANT时,总是报告参数类型不正确。
谢谢!
...全文
161
6
打赏
收藏
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用? ActiveX中的这个函数实际返回的是一个variant数组,长度不确定,请问我在vc中调用时应该 使用的参数类型是什么?我使用VARIANT时,总是报告参数类型不正确。 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
andyred
2004-11-12
打赏
举报
回复
风老哥,你好,看了你的帖子我获益颇多,真的非常感谢.
我在你的基础上加工之后,程序已经可以运行,但结果还不正确,
问题应该在于SafeArrayCreate第一个参数的设置上面,
GetDataObject具体返回的数组个数和每个元素的类型都是未知的,
我应该如何设置SafeArrayCreate的第一个参数?调用之后如何判断
具体每个元素的类型?我目前这样应该得到的是一个float或者double
但v2.vt 目前的值缺是 VT_STORED_OBJECT。
希望能再次指教一下
SAFEARRAY * psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 20;
psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
VARIANT obj;
obj.vt = VT_ARRAY;
obj.parray = psa;
pSoftbus.GetDataObject( "测试库", "D001", &obj );
ASSERT(obj.vt == (VT_ARRAY | VT_VARIANT));
SAFEARRAY *psa1 = obj.parray;
VARIANT* pd;
SafeArrayAccessData(psa1, (void**)&pd);
VARIANT v2 = pd[7];
double dv = v2.fltVal;
SafeArrayUnaccessData(psa);
CString str;
str.Format( "Value is: %f type: %d", dv, v2.vt );
AfxMessageBox( str );
andyred
2004-11-12
打赏
举报
回复
风老哥,你好
bluwindhrt
2004-11-12
打赏
举报
回复
VARIANT obj;
pSoftbus.GetDataObject( "测试库", "D001", &obj );
ASSERT(obj.vt == VT_ARRAY|VT_DOUBLE));
SAFEARRAY *psa = obj.parray;
double* pd;
SafeArrayAccessData(psa, (void**)&pd);
double dv = pd[7];
SafeArrayUnaccessData(psa):
CString str;
str.Format( "Value is: %f", dv );
AfxMessageBox( str );
andyred
2004-11-12
打赏
举报
回复
多谢兄台,我的清款是这样:
ActiveX别人已经写好,不能再动,我现在要在vc中使用。
通过class wizard->add class->from a type library加入到工程后代码如下:
short _SoftBus::GetDataObject(LPCTSTR objLib, LPCTSTR ObjID, VARIANT* obj)
{
short result;
static BYTE parms[] =
VTS_BSTR VTS_BSTR VTS_PVARIANT;
InvokeHelper(0x60030008, DISPATCH_METHOD, VT_I2, (void*)&result, parms,
objLib, ObjID, obj);
return result;
}
我是这样调用的:
_SoftBus pSoftbus;
VARIANT v;
v.vt = VT_R8;
v.dblVal = 10.0;
pSoftbus.CreateDispatch( "SoftBusExeServer.SoftBus");
pSoftbus.ModifyObject( "测试库", "D001", 8, v, TRUE );
VARIANT obj[20];
pSoftbus.GetDataObject( "测试库", "D001", obj ); //运行到这里出错, 在vb中调用
//它返回的是一个Variant类型的
//数组,长度不确定
double dv = obj[7].dblVal;
CString str;
str.Format( "Value is: %f", dv );
AfxMessageBox( str );
sinall
2004-11-12
打赏
举报
回复
你可以对这个variant进行操作啊
1、variant本身包含一种SafeArray。具体,你可以看看variant定义,及相关的api函数
2、可以用COleSafeArray包装variant,然后调用COleSafeArray的成员函数。
andyred
2004-11-12
打赏
举报
回复
哦,我现在明白了!
多谢二位啦!
在
VC
中
如何
使用
VARIANT
型变量
本文介绍了
VC
中
VARIANT
变量的
使用
方法,这是一种通用数据类型,主要用于
ActiveX
Automation。文章详细解释了
VARIANT
的结构,并对比了
VC
与
VB
中
调用
ActiveX
对象的方法。
标准MFC WinSock
ActiveX
控件开发实例
本文详细介绍
使用
MFC
ActiveX
开发WinSock控件的过程,包括搭建环境、提供接口与事件、编
写
核心代码等内容,并展示了如何在
VC
和
VB
中
调用
该控件。
标准MFC WinSock
ActiveX
控件开发实例(二)
本文介绍了一个标准MFC WinSock
ActiveX
控件的开发实例,重点讲解了如何利用
VARIANT
类型进行网络数据的发送和接收,并提供了控件在
VC
和
VB
中
的
调用
方法。
标准MFC WinSock
ActiveX
控件开发实例(II)高级篇
本文介绍了一个基于MFC的WinSock
ActiveX
控件的开发过程,重点讲解了利用
VARIANT
类型进行网络数据的发送和接收,以及如何
使用
SAFEARRAY和BSTR等数据结构。同时提供了该控件在
VC
和
VB
下的
调用
示例。
标准MFC WinSock
ActiveX
控件开发实例(II)高级篇
本文介绍了一种基于MFC的WinSock
ActiveX
控件开发方法,重点讲述了如何
使用
VARIANT
类型
参数
进行网络数据的发送与接收,同时给出了
VC
和
VB
下的
调用
示例。
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章