• 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定义方法的VARIANT型参数问题

ActiveX定义方法的VARIANT型参数问题

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

佚名通过本文主要向大家介绍了activexobject未定义,activex控件使用方法,activex控件下载,activex控件下载xp,activex控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ActiveX定义方法的VARIANT型参数问题
描述:

我在ActiveX中定义了两个方法,一个是GetData,一个是SetData,参数类型都是VARIANT,
可是当外部程序调用时却出现问题,在VC中调用正常,可是换成BCB调用时,只有SetData函数通过,GetData函数却一直出现异常,一调试,发现调用GetData后,vData的值根本就没变过,这是怎么回事呀!
/* ActiveX中的代码 */
long CFuYouCtrl::SetData(const VARIANT FAR& vData) 
{
    // TODO: Add your dispatch handler code here
    void* pDest;
    SafeArrayAccessData(vData.parray, &pDest);
    memcpy(m_Fuyou, pDest, vData.parray->rgsabound[0].cElements);
    SafeArrayUnaccessData(vData.parray);
    Invalidate();
    return 0;
}
long CFuYouCtrl::GetData(VARIANT FAR* pvData) 
{
    // TODO: Add your dispatch handler code here
    pvData->vt = VT_UI1 | VT_ARRAY;
    SAFEARRAYBOUND bound;
    bound.cElements = strlen(m_Fuyou);
    bound.lLbound = 0;
    pvData->parray = SafeArrayCreate(VT_UI1, 1, &bound); // Create it
    void* pDest;
    SafeArrayAccessData(pvData->parray, &pDest);
    memcpy(pDest, m_Fuyou, strlen(m_Fuyou)); // Copy into array
    SafeArrayUnaccessData(pvData->parray);
    return 0;
}
/* VC 调用的代码 */
void CFuyouTestDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    char fBuf[]="hello";
    VARIANT varTemp;
    varTemp.vt = VT_UI1 | VT_ARRAY;
    SAFEARRAYBOUND bound;
    bound.cElements = strlen(fBuf);
    bound.lLbound = 0;
    varTemp.parray = SafeArrayCreate(VT_UI1, 1, &bound); // Create it
    void* pDest;
    SafeArrayAccessData(varTemp.parray, &pDest);
    memcpy(pDest, fBuf, strlen(fBuf)); // Copy into array
    SafeArrayUnaccessData(varTemp.parray);
    m_Fuyou.SetData(varTemp);
    SafeArrayDestroy(varTemp.parray); 
}
void CFuyouTestDlg::OnButton2() 
{
    // TODO: Add your control notification handler code here
    char fBuf[256];
    VARIANT varTemp;
    m_Fuyou.GetData(&varTemp);
    memcpy(fBuf,varTemp.parray->pvData,varTemp.parray->rgsabound[0].cElements);
    fBuf[varTemp.parray->rgsabound[0].cElements]='\0';
    MessageBox(fBuf);
    SafeArrayDestroy(varTemp.parray); 
}
/* BCB 调用的代码*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char fBuf[]="hello";
    VARIANT varTemp;
    varTemp.vt = VT_UI1 | VT_ARRAY;
    SAFEARRAYBOUND bound;
    bound.cElements = strlen(fBuf);
    bound.lLbound = 0;
    varTemp.parray = SafeArrayCreate(VT_UI1, 1, &bound); // Create it
    void* pDest;
    SafeArrayAccessData(varTemp.parray, &pDest);
    memcpy(pDest, fBuf, strlen(fBuf)); // Copy into array
    SafeArrayUnaccessData(varTemp.parray);
    FuYou1->SetData(varTemp);
    SafeArrayDestroy(varTemp.parray); 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    char fBuf[256];
    VARIANT varTemp;
    FuYou1->GetData(&varTemp);
    memcpy(fBuf,varTemp.parray->pvData,varTemp.parray->rgsabound[0].cElements);
    fBuf[varTemp.parray->rgsabound[0].cElements]='\0';
    Edit1->Text = fBuf;
    SafeArrayDestroy(varTemp.parray);
}


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

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

  • ActiveX中能导出自定义的数据结构吗?
  • 关于自定义ActiveX方法的问题!
  • 如何实现Activex自定义事件并使页面能接收该事件
  • ActiveX中method定义中有关指针参数的问题
  • 如何定义activex中的method
  • ActiveX的成员定义问题
  • activex可能自定义消息吗
  • ActiveXControls中的自定义事件
  • Activex自定义结构体数据传递
  • 如何返回自己定义的数据类型Activex

相关文章

  • 2017-06-05 CSocket和多线程问题?
  • 2017-06-04 怎么用GetObject返回自己写的组件的实例?
  • 2017-06-05 外壳扩展程序怎样打包、发布
  • 2017-06-05 ATL添加多个连接点问题~
  • 2017-06-05 请教大家纯资源DLL的编写,及调用方法?项冽
  • 2017-06-04 SysAllocString的疑问
  • 2017-06-05 哪位能给我一个简单的dde的例子
  • 2017-06-05 MAPX数据绑定时出现“建立空文档失败”
  • 2017-06-04 怎样将C++开发的windows程序转化为ActiveX控件?
  • 2017-06-04 ATL创建了DLL组件为什么不能使用?

文章分类

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

最近更新的内容

    • 如何把DOM对象重组html?
    • 急求解答:关于sendmessage!为什么我向记事本发送了一个F5键却没反应??
    • DLL中的CWnd子类接收消息的问题
    • 熟悉dcom部署的老大进来帮帮我!!!
    • 利用系统剪切板实现拖放功能,如何获得DoDragDrop后的目标路径?
    • 急!急问个位高手!怎么样把CListCtrl里面的数据导入到excel里面!
    • 一个打印控件怎么控制多台打印机
    • 多线程中如何实现对WORD的调用(com调用),急切求助,大家帮忙给个办法。谢谢了
    • Boost正则问题求助
    • 关于OPC历史数据服务器开发,在使用IOPCHDA_Server时出现‘向占位程序传送了空的索引指针’的错误

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

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