• 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 > mfc写的activex,和脚本语言互动出现了问题,请高手帮忙。对接口技术还是似懂非懂啊。

mfc写的activex,和脚本语言互动出现了问题,请高手帮忙。对接口技术还是似懂非懂啊。

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

佚名通过本文主要向大家介绍了 mfc写的activex,和脚本语言互动出现了问题,请高手帮忙。对接口技术还是似懂非懂啊。等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: mfc写的activex,和脚本语言互动出现了问题,请高手帮忙。对接口技术还是似懂非懂啊。
描述:

控件的方法:
方法在头文件中的声明
void GetText(SHORT Index, BSTR* CellText);
方法在实现文件中“调度映射BEGIN_DISPATCH_MAP”部分的定义
DISP_FUNCTION_ID(CYFCtrl, "GetText", dispidGetText, GetText, VT_EMPTY, VTS_I2 VTS_PBSTR)
方法在接口文件中的定义
[id(35), helpstring("方法GetText")] void GetText(SHORT Index, BSTR* CellText);
方法在vbscript中调用如下,出错:“类型不匹配:‘obj.GetText’”
<script language="vbscript">
sub sub1()
dim s
obj.GetText 0, s ’obj是对象名称
msgbox s
end sub
</script>
方法在vb等开发工具中调用没有任何问题。
以下是vb调用,正确执行了。
Dim s As String
Me.Obj.GetText 0, s ’obj是对象名称
MsgBox s
请问各位高手,问题出在那里?怎样解决?


解决方案1:

脚本语言不支持复杂数据类型。复杂数据类型应该被封装为自动化对象,使用其属性、方法来访问里面的数据。

解决方案2:

至于你上面说的,BSTR* CellText,造成无法使用的话(如果是因为指针的话),那么我上面说的表示成字符串的方法似乎又不可行了,其实你不防变通一下,把所有数据表示在一个字符串里面,用分号相隔。
这种解决方案是不是很怪异呢?如果你是搞VB的,非常容易想到的就是这个解决方案了,我也是跟VB人学的。

解决方案3:

这个问题,你要和VB人讨论,可能他们告诉你,把所有数据都表示成字符串!
VB人给我的感觉就是没有二进制的概念,这并不是看不起他们,而是他们用得太少了。就像指针一样。
所以,这也算是一种解决方案,但相比于VARIANT,我认为字符串表达方法更慢,所以我不会取它的,我这个人比较看重效率。

解决方案4:

从控件中传出来多个参数,考虑到VB、javascript这类语言,所以不能使用指针(他们到底能不能调用带指针的函数,我也不懂,我只懂C语言,网上问也是一部分人说行一部分人说不行)。
所以在我的控件中,我都提供两套函数比如:
BOOL GetValue(float* pv1, float* pv2); //这是给C语言调用的
VARIANT VBGetValue(); //这是给VB调用的
这个时候,VARIANT这种数据类型就发挥作用了,因为它可以表达数组,完全可以把v1,v2放在一个VARIANT里面。
但这样也有个问题,如果v1是float型,v2是double型呢!
总之,一次传出多个参数,不是很好弄。
我也没找到完美的解决方案。

解决方案5:

就获取字符串,不用VARIANT,VARIANT这种数据类型速度非常慢,只有非用不可的情况下使用。
你的问题应该这样:
.odl:
[id(29)] BSTR GetUnit(); //29为序号,不定
.h:
afx_msg BSTR GetUnit();
.cpp:
DISP_FUNCTION(CST_CurveCtrl, "GetUnit", GetUnit, VT_BSTR, VTS_NONE)
BSTR CST_CurveCtrl::GetUnit() 
{
CString strResult = "something";
return strResult.AllocSysString();
}

解决方案6:

这个名字是写控件的时候系统生成的一个名字
这个控件注册的时候注册的ProgID

解决方案7:

楼上的方法可行


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

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

  • mfc写的activex,和脚本语言互动出现了问题,请高手帮忙。对接口技术还是似懂非懂啊。

相关文章

  • 2017-06-04 使用MSComm串口通信的问题
  • 2017-06-04 VC自定义的ACTIVEX控件,生成的程序可以在本机上使用,在其他机器不能运行,拿出所有分求助!!!
  • 2017-06-04 WIN7系统下写Excel单元格的一点问题
  • 2017-06-04 急:用ALTCOM向导生成的COM组件注册问题
  • 2017-06-05 如何通过编程强制终止一个正在运行的程序(进程),即相当于windows中的结束任务。这个程序(进程)不是自己编写的程序自身,而是一个其
  • 2017-06-05 线程问题,如何停止一个线程,我想在main中停止线程正在进行的工作,可以吗?如何做
  • 2017-06-05 ====有没有把16位程序转化成32位程序的工具,或算法===
  • 2017-06-05 两个线程使用信号量通信的问题!
  • 2017-06-04 一定送分,就告诉我怎么做,简单,关于ActiveX控件于脚本交互的问题
  • 2017-06-04 我封装的dispatch接口访问类为什么调用vb的com如果有长型,整型的参数调用不成功呢?如果光串型没问题

文章分类

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

最近更新的内容

    • 怎么实现当鼠标放到taskbar上某个区域时系统跳出的title窗口?
    • 谁有《深入解析ATL下载》电子版下载啊
    • vc如何调用java写的com组件
    • 如何实现flash透明背景播放?
    • 子对话框上的listctrl控件创建失败?
    • 怎样在进程之间传递消息!急,在线等!!
    • ACTIVEX安装问题!!!已经显示安装提示了!
    • 多线程之间如何调用COM组件
    • IE控件与HTMLVIEW的区别
    • 用ATL做的控件为什么在IE里不支持左右建,我用pretranslatemessage

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

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