• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > activex控件到底怎么接受容器送来的数据啊

activex控件到底怎么接受容器送来的数据啊

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了activex控件测试容器,activex控件下载,activex控件,activex控件被阻止,activex控件官方下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 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是一个标签点的名称对应唯一的一个值 可我到底怎么得到这个值能


解决方案1:

调用者通常应该预先知道返回值的类型,只需要再检验一下类型是否匹配即可,然后按照类型取出正确的值来。有些接口方法可以返回多种类型,这时调用者就应该根据类型来判断。

CComVariant vResult;
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) 取出字符串
}

解决方案2:

引用 4 楼 u010770138 的回复:
Quote: 引用 2 楼 redui 的回复:

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;

我前面可能没说明白,我的意思就是说我在掉用一次GetDataValue之后,不论我在GetDataValue函数里面进行了何种赋值像V_BSTR(value) = ::SysAllocString(L"hello shit");V_I4(value) = 520;
我依然会得到接口送过来的实际数据值对吗?

接口调用的时候是什么值,你就按什么类型去取

解决方案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;

解决方案4:

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ActiveX控件如何抛出错误让容器接收?谢谢
  • 难题用代码实现在ACTIVEX容器中插入对象
  • 在activex中如何获得容器如ie的hWnd
  • activex插件中的属性和方法,是不是一定要在添加了属性页之后才能被activex控件测试容器和脚本调用?
  • 请问ActiveX怎样才能使控件的字体和容器的字体一样?
  • activex想做成一个容器包含其它控件,需要实现什么接口
  • 请大家指教容器如何给ACTIVEX控件传递参数取得返回值
  • 如何在容器中链接入ActiveX对象?
  • 请教ActiveX控件怎样捕获容器窗口移动事件?
  • 在ActiveX容器中怎么拖动动态创建的控件像CEdit,CButton等

相关文章

  • 2017-06-04 急:引用COM组件开发B/S应用的问题,请予指导!
  • 2017-06-05 开启一个线程执行简单代码并等待完成,时间竟然需要700ms
  • 2017-06-04 如何一个屏蔽网页网页程序
  • 2017-06-05 采用多线程定时拷贝文件夹的问题,拷贝时机器就像死机一样?
  • 2017-06-04 DCOM能不能跨域调用啊?比如服务器是internet上的一台主机,而客户是一台拔号PC机?
  • 2017-06-04 怎样创建一个支持聚合的COM组件
  • 2017-06-04 不解,为何mfc把com的实现做成嵌套类?
  • 2017-06-05 启动打印机打印时,任务管理器中的打印进程是什么?还是没有?
  • 2017-06-04 如何在ActiveX控件中绘制按钮、下拉菜单等控件????
  • 2017-06-04 基于VC平台的ActiveX控件设计与开发

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • MFCDLL如何在DLL中响应主框架菜单消息
    • 可以使用::FindWindowNULL,names获取ActiveX的窗口句柄,然后向它发送消息吗
    • 散分:很奇怪的问题,很多高手都解决不了
    • OnFileOpen函数怎么解决
    • 有关IE插件的问题
    • 不用MFC,怎么在windowsform里Load一个Flash?
    • 求救:一个VC中多线程的问题
    • vc读取Excel数据异常
    • 脚本添加事件处理函数失败,脚本引擎获得IProvideMultipleClassInfo接口后就不再查询IConnectionPointContainer接口
    • 怎样将一个特定的模板类导出为DLL?谁能解释清楚

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有