首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>C/C++>开发工具>VC调用JavaScript 实现如何使当前程序的对象进入脚本
VC调用JavaScript 实现如何使当前程序的对象进入脚本
来源: 发布时间:2008-08-26 发布人: 浏览: 人次   字体: [ ]  

本文用VC调用JavaScript 实现如何使当前程序的对象进入脚本,这里所指的JavaScript 为MS Script,引入msscript.ocx 实现的,也就是ECMAScript(下载本例源代码)。从题目咋眼看来对于没有写过VC调用msscript.ocx的人来说不是很好理解,因为这样做似乎太容易了,何来难题?

例如写JavaScript实现数值计算,例如: _variant_t outpar=pScriptControl->Eval(_bstr_t("1+4*5")); 这样的数值计算不涉及js调用脚本外部的对象,例子到处可见,但是应用范围非常窄小。也就是说,从现有的文献来看,用VC调用 JavaScript 都是 JavaScript 单向的,但是从来没见过把VC中的现有的对象交给 JavaScript 反过来调用(也就是双向调用)。有些人已经实现或者看到, JavaScript 可以通过 obj = new ActiveXObject(...);的方式,把用VC编写COM,然后让 JavaScript 创建调用,但是,这样new出来的对象,仍然不是VC应用的现有对象。如果要调用现有对象,需要通过被new的COM对象间接调用才行,而且应用程序被调用的对象也是COM规范。如果通过COM来实现这个难题,应用程序结构比较复杂,JavaScript 创建COM,所创建的COM能访问应用程序对象。

所以要扩大 JavaScript 的应用范围,必须实现这样的核心问题:双向调用

 

双向调用的一个分解问题是,VC对象如何进入脚本呢?下面介绍一种实现方法。

一、界面:

二、主要代码

1 声明定义可以被JavaScript调用的类和对象

 

  1. //声明可以被JavaScript调用的类并创建一个转接对象g_Dialogimpl
  2. BEGIN_DSRE_POPULAR_OBJECT(CCppCallJavaScriptDlg)
  3.     DEFINE_POPULAR_METHOD(CCppCallJavaScriptDlg,Rectangle);
  4.     DEFINE_POPULAR_METHOD(CCppCallJavaScriptDlg,MoveTo);
  5.     DEFINE_POPULAR_METHOD(CCppCallJavaScriptDlg,LineTo);
  6.     DEFINE_POPULAR_METHOD(CCppCallJavaScriptDlg,TextOut);
  7. END_DSRE_POPULAR_OBJECT()g_Dialogimpl;
  1. //定义可以被JavaScript调用的函数,分别是Rectangle, MoveTo, LineTo, TextOut
  2. DEFINE_DSRE_FUNCTION(CCppCallJavaScriptDlg,Rectangle)
  3. {
  4.     int x,y,cx,cy;
  5.     x=(*args)[0]->AsInt();
  6.     y=(*args)[1]->AsInt();
  7.     cx=(*args)[2]->AsInt();
  8.     cy=(*args)[3]->AsInt();

  9.     ::Rectangle(m_hDC,x,y,cx,cy);
  10. }

  11. DEFINE_DSRE_FUNCTION(CCppCallJavaScriptDlg,MoveTo)
  12. {
  13.     int x,y;
  14.     x=(*args)[0]->AsInt();
  15.     y=(*args)[1]->AsInt();

  16.     ::MoveToEx(m_hDC,x,y,NULL);
  17. }

  18. DEFINE_DSRE_FUNCTION(CCppCallJavaScriptDlg,LineTo)
  19. {
  20.     int x,y;
  21.     x=(*args)[0]->AsInt();
  22.     y=(*args)[1]->AsInt();

  23.     ::LineTo(m_hDC,x,y);
  24. }

  25. DEFINE_DSRE_FUNCTION(CCppCallJavaScriptDlg,TextOut)
  26. {
  27.     int x,y;
  28.     x=(*args)[0]->AsInt();
  29.     y=(*args)[1]->AsInt();
  30.     wchar_t *text=(*args)[2]->AsString()->GetText();
  31.     ::TextOutW(m_hDC,x,y,text,(*args)[2]->AsString()->GetLength());
  32. }

    共2页: 上一页 1 [2] 下一页
相 关 文 章   发布商链接
·实例讲解vc调用winrar进行文件解压程...
·如何用VC编写供PB调用的Dll须注意的...
·vc++中找不到controls了怎么办?
·用vc++开发的程序编译连接时出现了un...
·如何在VC2008中编程实现获取程序的版...
·图解VC2005之创建解决方案祥细步骤
·如何在Tree空件上实现点右健选中Item...
·如何在程序中获得其他程序的图标?
·VC怎样加载其他的应用程序?
·Visual C++编程技巧实用小结14例
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·vc++实现下载工具软件flashge...
·VC获取目录的两种方法代码
·VC获得当前系统是什么语言版...
·双击VC对话框提示cannot add ...
·VC操作Excel和运用ADO操作数...
·vc6.0实现鼠标显示按钮功能提
·VC++更改系统IP地址的方法代...
·如何消除vc屏幕闪烁的方法?
·在CListView控件添加右键弹出
·MFC中利用CMenu类动态添加弹...
·详解如何在VC++下动态调整水...
·如何在VC++下完全动态生成水...
·C++builder调试时提示找不到b...
·vc实现定时执行任务的两种方...
·VC使用定时机制的几种方法
热 门 文 章
·图解VC2005之创建解决方案祥...
·VC++更改系统IP地址的方法代...
·在VC中创建DLL文件的方法步骤...
·VC使用定时机制的几种方法
·Vc中自定义消息及其触发使用
·VC制作使用图片做为背景的对...
·vc实现定时执行任务的两种方...
·在CListView控件添加右键弹出...
·如何在VC++下完全动态生成水...
·MFC中利用CMenu类动态添加弹...
·C++builder调试时提示找不到b...
·双击VC对话框提示cannot add ...
·如何消除vc屏幕闪烁的方法?
·实例讲解vc调用winrar进行文...
·Visual C++开发工具与调试技...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .