activex控件到底如何接受容器送来的数据

activex控件到底怎么接受容器送来的数据啊
本帖最后由 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是一个标签点的名称对应唯一的一个值 可我到底怎么得到这个值能

------解决方案--------------------
通过向导添加方法,然后编译器会帮你在需要的地方生成代码的了。使用时具体看看import后函数导出来的类方法的参数是什么来进行传入,如果导出来的参数类型是VARIANT* value,那就传入一个VARIANT变量的地址
------解决方案--------------------
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;
------解决方案--------------------
引用:
Quote: 引用:

value已经存在了,你只需设置好它的类型和值即可,比如你想返回一个字符串:
V_VT(value) = VT_BSTR;