社区
ATL
帖子详情
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
andyred
2004-11-11 05:04:13
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
ActiveX中的这个函数实际返回的是一个variant数组,长度不确定,请问我在vc中调用时应该
使用的参数类型是什么?我使用VARIANT时,总是报告参数类型不正确。
谢谢!
...全文
113
6
打赏
收藏
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用?
VB 写的ActiveX中函数使用了Variant 参数,vc如何调用? ActiveX中的这个函数实际返回的是一个variant数组,长度不确定,请问我在vc中调用时应该 使用的参数类型是什么?我使用VARIANT时,总是报告参数类型不正确。 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
哦,我现在明白了!
多谢二位啦!
Variant
输入出
参数
,ocx传递byte数组,safearray
使用
方法,
vc
写
ocx在
vb
下
调用
本话题主要聚焦于如何在
VC
(Visual C++)
中
编
写
OCX控件,并在
VB
(Visual Basic)
中
进行
调用
,特别是涉及到
Variant
输入/输出
参数
、通过 OCX 传递字节数组以及 SafeArray 的
使用
方法。 1.
Variant
输入/输出
参数
: ...
通过
vc
将数据导入excel表格
通过
使用
ActiveX
Automate,可以在
VC
中
实现在Excel
中
写
数据、读取数据、格式化数据等操作。 二、对象的属性值的读取或赋值 在
VC
中
,需要
使用
GetProperty()或SetProperty(NewValue)
函数
来读取或赋值对象的属性值,而...
标准MFC WinSock
ActiveX
控件开发实例
另外还提供了WinSock的详细开发步骤,以及如何响应网络超时,网络断开的事件方法以及在
VC
,
VB
调用
该控件的方法。 一、MFC
ActiveX
控件开发步骤(
VC
6.0): New->Projects->MFC
ActiveX
ControlWizard,然后输入...
Miscro ScriptControl 脚本控制语言
假设我们有一个名为`AddNumbers`的
VB
函数
,接收两个
参数
并返回它们的和。 ```
vb
script Function AddNumbers(a, b) AddNumbers = a + b End Function ``` 在
VC
++
中
调用
这个
函数
如下: ```cpp BSTR
vb
Code = L...
VC
++ 与Execel
VB
A编程
- **尽量
使用
VB
A原有的属性、方法和WORKSHEET
函数
**:直接
使用
内置
函数
可以提高代码效率。 - **尽量减少
使用
对象引用**:特别是在循环
中
,减少对象的访问可以显著提高性能。 - **
使用
With语句**:通过减少对象引用...
ATL
3,248
社区成员
48,529
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章