(五)vc中调用JavaScript(1)

这种方式可以直接调用外部我们自己准备好的JS函数,而不需要打开网页,只能调用网页里的JS函数。
调用代码如下:

#include "stdafx.h"
#include"windows.h"
#include"stdio.h"
#import "C:\\Windows\\SysWOW64\\msscript.ocx" //ocx文件的位置,
using namespace MSScriptControl;

#include"fstream"
#include"string"
#include"stdlib.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	HRESULT hr = CoInitialize(NULL);         //初始化接口
	IScriptControlPtr pScriptControl(__uuidof(ScriptControl));//定义脚本控件指针
	pScriptControl->Language = "JavaScript";//说明脚本语言

	fstream file;
	file.open("D:\\VC++编程1200例\\C++调用JS\\test.js");//调用脚本文件的位置,
	string   strFileContent;//strFileContent表示整个JS代码段的内容
	char szTemp[1024] = "";//每次读取1024个字符

	do
	{
	   file.read(szTemp, 1024);
	   strFileContent.append(szTemp);//将读取的字符添加到代码段
	   memset(szTemp, 0, 1024);//初始化函数,将szTemp归0
	}while (!file.fail());//如果读写过程中出现错误则退出循环

	file.close();//关闭文件
	pScriptControl->AddCode(strFileContent.c_str());//c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。是为了与C语言兼容
	VARIANT A = pScriptControl->Eval(L"add(4,5)");
	int iRet = A.intVal;
	printf("%d\n", iRet);

	system("pause");
	return 0;
}

外部定义的JavaScript函数

function add(a,b)
{
   return a+b;
}

备注:

1. memset函数

memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 。
memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度。

2. fstream类
  • ofstream, ifstream, fstream
    在fstream类中,用open成员函数打开文件,实现类与文件的关联操作。
  • open(filename, mode, prot):对所属类进行用指定的参数进行特定的文件关联
    几种打开方式(mode):(这些方式可以用 ‘|’ 组合起来)
mode含义
ios::in打开输入(读)文件
ios::out打开输出(写)文件
ios::ate初始位置为文件尾
ios::app所有写入附加在文件末尾
ios::trunc如果所操作的文件已经存在了,就先删除
ios::binary以二进制打开

打开文件的属性(prot):(这些方式可以用’+'进行组合,这个参数可以省略不传)

mode含义
0普通文件,打开操作
1只读文件
2隐含文件
4系统文件
  • close():用来关闭文件,是文件重新变为可访问,对象流也可以打开其他文件了
  • 判断文件状态

is_open():文件是否正常打开

bad():读写过程中是否出错(操作对象没有打开,写入的设备没有空间)

fail():读写过程中是否出错(操作对象没有打开,写入的设备没有空间,格式错误–比如读入类型不匹配)

eof():读文件到达文件末尾,返回true

good():以上任何一个返回true,这个就返回false

- 获得和设置流指针

- 对于所有的输入输出流都有至少一个指针,指向下一个要操作的位置

ofstream put_point

ifstream get_point

fstream put_point和get_point

- 获取流指针位置

tellg(): 返回输入流指针的位置(返回类型long)

tellp(): 返回输出流指针的位置(返回类型long)

- 设置指针位置

seekg(long position): 设置输入流指针位置为第position个字符(文件首位置为开始位置)

seekp(long position): 设置输出流指针到指定位置

- 缓存和同步

当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流, 每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。

当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:

当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。
当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。
控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。
明确调用函数sync(): 调用成员函数sync() (无参数)可以引发立即同步。这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值