佚名通过本文主要向大家介绍了activex控件测试容器,activex控件下载,activex控件,activex控件被阻止,activex控件官方下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: activex控件到底怎么接受容器送来的数据啊
描述:
接口是这么定义的
重写GetDataValue的时候我到底应该怎么给*Value赋值?把什么赋值给他啊到底怎接受数据啊
BSTR bstrSymble是一个标签点的名称对应唯一的一个值 可我到底怎么得到这个值能
解决方案1:
接口调用的时候是什么值,你就按什么类型去取 解决方案3:
描述:
本帖最后由 u010770138 于 2013-07-09 11:45:41 编辑
我要写一个控件接受容器通过接口发过来的数据接口是这么定义的
#pragma once
#include <unknwn.h>
//#if defined(__cplusplus) && !defined(CINTERFACE)
// {CBBAEC4B-AA78-4819-92FF-EC5479D6CE5F}
static const IID IID_IDVDataExchange =
{ 0xcbbaec4b, 0xaa78, 0x4819, { 0x92, 0xff, 0xec, 0x54, 0x79, 0xd6, 0xce, 0x5f } };
//MIDL_INTERFACE("CBBAEC4B-AA78-4819-92FF-EC5479D6CE5F")
class IDVDataExchange : public IUnknown
{
public:
[helpstring("获得变量列表")] virtual HRESULT STDMETHODCALLTYPE GetDatas(/*[out, retval]*/ VARIANT* value) = 0;
[helpstring("设置变量名称")] virtual HRESULT STDMETHODCALLTYPE SetDataName(/*[in]*/ BSTR bstrSymble,/*[in]*/ BSTR bstrName) = 0;
[helpstring("获得变量值")] virtual HRESULT STDMETHODCALLTYPE GetDataValue(/*[in]*/ BSTR bstrSymble,/*[out, retval]*/ VARIANT* value) = 0;
[helpstring("设置变量值")] virtual HRESULT STDMETHODCALLTYPE SetDataValue(/*[in]*/ BSTR bstrSymble,/*[in]*/ VARIANT value) = 0;
};
typedef /* [unique] */ IDVDataExchange *LPDVDATAEXCHANGE;
//#endif
重写GetDataValue的时候我到底应该怎么给*Value赋值?把什么赋值给他啊到底怎接受数据啊
BSTR bstrSymble是一个标签点的名称对应唯一的一个值 可我到底怎么得到这个值能
解决方案1:
调用者通常应该预先知道返回值的类型,只需要再检验一下类型是否匹配即可,然后按照类型取出正确的值来。有些接口方法可以返回多种类型,这时调用者就应该根据类型来判断。
CComVariant vResult;解决方案2:
ptr->GetDataValue(L"abc", &vResult);
if (V_VT(&vResult) == VT_I4)
{
long l = V_I4(&vResult);
}
else if (V_VT(&vResult) == VT_BSTR)
{
// V_BSTR(&vResult) 取出字符串
}
接口调用的时候是什么值,你就按什么类型去取 解决方案3:
value已经存在了,你只需设置好它的类型和值即可,比如你想返回一个字符串:
V_VT(value) = VT_BSTR;
V_BSTR(value) = ::SysAllocString(L"hello shit");
return S_OK;
如果返回一个long:
V_VT(value) = VT_I4;
V_I4(value) = 520;
return S_OK;
通过向导添加方法,然后编译器会帮你在需要的地方生成代码的了。使用时具体看看import后函数导出来的类方法的参数是什么来进行传入,如果导出来的参数类型是VARIANT* value,那就传入一个VARIANT变量的地址