• 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 > ATL编写的控件方法中为实现BYTE数组的传输设置参数为VARIANT,VC中可以调用,VB无法调用,何故

ATL编写的控件方法中为实现BYTE数组的传输设置参数为VARIANT,VC中可以调用,VB无法调用,何故

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

佚名通过本文主要向大家介绍了ATL编写的控件方法中为实现BYTE数组的传输设置参数为VARIANT,VC中可以调用,VB无法调用,何故等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ATL编写的控件方法中为实现BYTE数组的传输设置参数为VARIANT,VC中可以调用,VB无法调用,何故
描述:

如题
ATL中的代码类似:  
//主要是为了传递BYTE数组,仅传入用 库名MyCtrl  对象名MyObj  
Make(VARIANT  byData)  
//VB中调用  
Dim  a  As  MYCTRLLib.MyObj  
Dim  b(2)  As  Byte  
b(0)  =  97  
b(1)  =  98  
b(2)  =  99  
a.Make  b  
VARIANT难道不是COM接口的支持的标准数据类型么??


解决方案1:

你是不是atl那边做的有问题啊。我以前做过一个例子,传的是long数组,好用:
接口:HRESULT Sum([in]VARIANT varOp1, [out,retval]long* plResult);
实现:
STDMETHODIMP CMath::Sum(VARIANT varOp1, long *plResult)
{
// TODO: Add your implementation code here
if ( !(varOp1.vt & VT_I4) )
return DISP_E_TYPEMISMATCH;
if ( !(varOp1.vt & VT_SAFEARRAY) )
return DISP_E_TYPEMISMATCH;
SAFEARRAY* psa;
if ( varOp1.vt & VT_BYREF)
psa = *(varOp1.pparray);
else
psa = varOp1.parray;
long lLBound,lUBound;
SafeArrayGetLBound( psa, 1, &lLBound );
SafeArrayGetUBound( psa, 1, &lUBound );
long lSum = 0;
for ( long i = lLBound; i <= lUBound; i++)
{
long lValue;
SafeArrayGetElement( psa, &i, &lValue );
lSum += lValue;
}
*plResult = lSum;
return S_OK;
}
--------------------------------------------------
vb中调用:
Set objMath2 = objMath
Dim longArray(1 To 10) As Long
For i = 1 To 10
    
    longArray(i) = i
Next
txtResult = objMath2.Sum(longArray)
-------------------------------------------------
这个例子是atl开发指南上的,我做过,用vc和vb测试都没问题


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

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

  • ATL编写的控件方法中为实现BYTE数组的传输设置参数为VARIANT,VC中可以调用,VB无法调用,何故

相关文章

  • 2017-06-05 在MFC中声明一个变量为volatile在多进程应用中有什么用?
  • 2017-06-05 是不是由Service起的程序,都有ADMINISTRATOR的权限?
  • 2017-06-04 如何获得ActiveX控件的窗口句柄?
  • 2017-06-05 高分请教多线程调用问题
  • 2017-06-04 请问自己做的ActiveX控件可以加到PPT或word文档里面吧?哪个高手可以帮帮我
  • 2017-06-05 动态库中创建子对话框的问题。
  • 2017-06-05 问一个线程运行问题
  • 2017-06-05 关于MSCOMM控件问题
  • 2017-06-05 关于hookopenprocess的奇怪的问题
  • 2017-06-04 utf8转gbk问题

文章分类

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

最近更新的内容

    • 可以将程序改成单线程配置的吗?
    • 方法必须是HRESULT的,那么如何返回其它类型
    • 在使用dll的工程中,不用__declspecdllimport也可以调用dll,为何?
    • 接口引用计数问题
    • 求助:dll调用ocx问题
    • 如何获取另一进程的活动窗口?
    • 请教高人:我自己写的DLL用来注入到其它的进程中,怎样让这个DLL能够接收并处理自定义消息?
    • vc编译windows的hello程序出错
    • BHO如何添加事件处理?
    • 请问如何用VC开发ie插件?

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

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