社区
ATL
帖子详情
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
andyred
2004-11-11 05:04:13
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
ActiveX中的这个函数实际返回的是一个variant数组,长度不确定,请问我在vc中调用时应该
使用的参数类型是什么?我使用VARIANT时,总是报告参数类型不正确。
谢谢!
...全文
108
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
打赏
举报
回复
哦,我现在明白了!
多谢二位啦!
标准MFC WinSock
ActiveX
控件开发实例
另外还提供了WinSock的详细开发步骤,以及如何响应网络超时,网络断开的事件方法以及在
VC
,
VB
调用
该控件的方法。 一、MFC
ActiveX
控件开发步骤(
VC
6.0): New->Projects->MFC
ActiveX
ControlWizard,然后输入...
C#微软培训资料
18.2 在 C #代码
中
调用
C++和
VB
编
写
的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
如何在
VB
中
调用
VC
编
写
的DLL
如何在
VB
中
调用
VC
编
写
的...还有一种是在
VC
中
生成
ActiveX
Automation服务器,在
VB
中
调用
。相对而言,第一种方法对
VC
编程者的要求最低,但要求你的伙伴进行配合,我推荐这种方法。 先说说
VC
++的编程。首先在
VC
++
中
关于
VC
从
VARIANT
类型取数据的小结
VARIANT
,变体类型,在
VB
中
是一个可以容纳很多常用类型的超级类型,所以,如果不知道它的里面到底存了些什么数据,对着它就像对着一个从未见过面的朋友一样,不知该怎么交流.在这种情况下,我们可以通过取得
VARIANT
类型...
java
调用
vc
dll、
vb
dll(Com 组件)
一、简单说明 java
调用
动态库其实都是需要通过...本人也是班门弄斧,想鄙视我的就鄙视吧,呵呵二、java
调用
vc
动态库 1、首先,
写
出java的
调用
程序,例子代码如下(javacall.java): public class javacall { ...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章