【IT专家】在COM组件中调用JavaScript函数

合集下载

JavaScript引擎研究与C++ 互相调用

JavaScript引擎研究与C++ 互相调用

JavaScript引擎研究与C、C++与互调用博客分类:软件程式-JavaScriptjavascriptc++脚本1.概要2.Google V82.1. 介绍Google Chrome是google 2008年9月发布的浏览器,Chrome的网页渲染部分使用的是Webkit的渲染引擎,Chrome的JavaScript引擎就是大名鼎鼎的V8了。

V8是C++语言编写的,是开放源码的,是所有的JavaScript引擎中速度最块的。

其开源项目地址为:/p/v8。

V8对外的API接口是C++的接口。

V8的API定义了几个基本概念:句柄(handle),作用域(scope),上下文环境(Context)。

模板(Templates),了解这些基本的概念才可以使用V8。

l上下文环境Context就是脚本的运行环境,JavaScript的变量、函数等都存在于上下文环境Context中。

Context可以嵌套,即当前函数有一个Context,调用其它函数时如果又有一个Context,则在被调用的函数中javascript是以最近的Context为准的,当退出这个函数时,又恢复到了原来的Context。

l句柄(handle)就是一个指向V8对象的指针,有点像C++的智能指针。

所有的v8对象必须使用句柄来操作。

没有句柄指向的V8对象,很快会被垃圾回收器回收了。

l作用域(scope)是句柄的容器,一个作用域(scope)可以有很多句柄(handle)。

当离开一个作用域(scope)时,所有在作用域(scope)里的句柄(handle)都会被释放了。

l模板(Templates)分为函数模板和对象模板,是V8对JavaScript的函数和对象的封装。

方便C++语言操作JavaScript的函数和对象。

l V8 API定义了一组类或者模板,用来与JavaScript的语言概念一一对应。

比如:V8的Function模板与JavaScript的函数对应V8的Object类与JavaScript的对象对应V8的String类与JavaScript的字符对应V8的Script类与JavaScript的脚本文本对应,它可以编译并执行一段脚本。

JavaScript+OCX+COM组件,实现网页对客户端DLL的调用

JavaScript+OCX+COM组件,实现网页对客户端DLL的调用

JavaScript+OCX+COM组件,实现网页对客户端DLL的调用(完整步骤)一、通过PB生成COM组件1、创建非可视用户对象uo_ testdll代码:public function string test_dll (string pname);String setupmessagebox("输入参数",pname)setup =ProfileString("C:\testdll\testdll.ini", "setup", "name", "没有设置")messagebox("本机参数",setup)FileCopy ("C:\testdll\testdll.ini" , "C:\testdll\testdll_"+String(Randomize (100))+".ini", FALSE) setProfileString("C:\testdll\testdll.ini","setup", "name", pname)return "我来自本机:"+setup +","+pnameend function2、创建COM组件:p_testdllA、选择对象:B、设置属性(选择生成的dll文件,两个new分别新建,选择构建完备注册组件选项)(两个new分别新建)(选择包含组件的库)C、发布,点击deploy执行3、注册dll文件:将依赖文件pbvm90.dll,libjsybheap.dll,libjcc.dll和testdll.dll放在同一目录,执行regsvr32 testdll.dll二、V B生成OCX控件hello_uo.ocx(选择ActiveX控件)(选择引用DLL)脚本:Private Sub Command1_Click()MsgBox uo_test(Text1.Text) + "---" + uo_test1(Text1.Text) End SubPublic Function uo_test(pname As String) As StringDim obj As ObjectSet obj = CreateObject("PB90.testdll")Dim result As Stringresult = obj.test_dll(pname)uo_test = resultEnd FunctionPublic Function uo_test1(pname As String) As String uo_test1 = "我来自VB:" + pnameEnd Function(选择生成)注册:regsvr32 hello_uo.ocx三、J avaScript调用OCX控件(找到OCX的id)代码:<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>输入参数:<input type="text" id="iii" value="1">返回结果:<input type="text" id="rrr" value="2"></input><input type="button" onclick="javascript:runOcx()" value="测试"><OBJECT id="TestOcx" name="TestOcx" classid="CLSID:A56939E4-596C-4A86-8814-F4CBC6DE5F80" width="0"height="0"> </OBJECT><script>function runOcx(){var ret1 = TestOcx.uo_test(document.getElementById("iii").value);var ret2 = TestOcx.uo_test1(document.getElementById("iii").value);document.getElementById("rrr").value = ret1 + "---" + ret2;}</script></body></html>执行结果:点击确定:点击测试:客户端配置文件:完。

Javascript自动执行函数(立即调用函数)

Javascript自动执行函数(立即调用函数)

Javascript⾃动执⾏函数(⽴即调⽤函数)开头:各种原因总结⼀下javascript中的⾃动执⾏函数(⽴即调⽤函数)的⼀些⽅法,正⽂如下在Javascript中,任何function在执⾏的时候都会创建⼀个执⾏上下⽂,因为function声明变量和function有可能只在该function内部,这个上下⽂,在调⽤function的时候,提供⼀些简单的⽅式来创建⾃由变量或私有⼦function。

eg:// 由于该function⾥返回了另外⼀个function,其中这个function可以访问⾃由变量i// 所有说,这个内部的function实际上是有权限可以调⽤内部的对象。

function makeCounter() {// 只能在makeCounter内部访问ivar i = 0;return function () {console.log(++i);};}// 注意,counter和counter2是不同的实例,分别有⾃⼰范围内的i。

var counter = makeCounter();counter(); // logs: 1counter(); // logs: 2var counter2 = makeCounter();counter2(); // logs: 1counter2(); // logs: 2alert(i); // 引⽤错误:i没有defind(因为i是存在于makeCounter内部)。

正⽂核⼼1、Javascript⽅法:在声明类似function foo(){}或var foo = function(){}函数的时候,通过在后⾯加个括弧就可以实现⾃执⾏,例如foo(),看代码:// 因为想下⾯第⼀个声明的function可以在后⾯加⼀个括弧()就可以⾃⼰执⾏了,⽐如foo(),// 因为foo仅仅是function() { /* code */ }这个表达式的⼀个引⽤var foo = function(){ /* code */ }// ...是不是意味着后⾯加个括弧都可以⾃动执⾏?function(){ /* code */ }(); // SyntaxError: Unexpected token (上述代码,如果甚⾄运⾏,第2个代码会出错,因为在解析器解析全局的function或者function内部function关键字的时候,默认是认为function声明,⽽不是function表达式,如果你不显⽰告诉编译器,它默认会声明成⼀个缺少名字的function,并且抛出⼀个语法错误信息,因为function声明需要⼀个名字。

js 调用函数内部的函数

js 调用函数内部的函数

js 调用函数内部的函数如何在 JavaScript 中调用函数内部的函数在JavaScript 中,函数是一种非常重要的概念,它可以帮助我们组织和重用代码。

而在函数内部,我们也可以定义其他函数,这些函数被称为“内部函数”或“嵌套函数”。

调用函数内部的函数可以帮助我们更好地组织代码,并且可以避免全局变量的污染。

本文将介绍如何在JavaScript 中调用函数内部的函数,并提供一些示例代码来帮助读者更好地理解。

在JavaScript 中,我们可以通过两种方式来调用函数内部的函数:在外部函数中直接调用内部函数,或者将内部函数作为外部函数的返回值,然后在外部调用返回的函数。

我们来看看如何在外部函数中直接调用内部函数。

我们可以在外部函数中定义一个内部函数,并在需要的时候直接调用它。

下面是一个简单的示例:```function outerFunction() {function innerFunction() {console.log("这是内部函数");}console.log("这是外部函数");innerFunction();}outerFunction();```在上面的代码中,我们首先定义了一个外部函数 `outerFunction`,然后在这个函数内部又定义了一个内部函数`innerFunction`。

在外部函数中,我们首先打印了一条消息,然后调用了内部函数。

当我们调用外部函数时,会首先打印外部函数的消息,然后再打印内部函数的消息。

另一种方式是将内部函数作为外部函数的返回值,然后在外部调用返回的函数。

下面是一个示例:```function outerFunction() {function innerFunction() {console.log("这是内部函数");}console.log("这是外部函数");return innerFunction;}var inner = outerFunction();inner();```在上面的代码中,我们同样定义了一个外部函数`outerFunction` 和一个内部函数`innerFunction`。

易语言调用js方法

易语言调用js方法

易语言调用js方法在易语言中调用JavaScript方法可以通过使用IE内核的COM 组件来实现。

首先,你需要创建一个IE浏览器对象,然后通过该对象来执行JavaScript代码。

下面是一个简单的示例代码来演示如何在易语言中调用JavaScript方法:创建 IE浏览器对象:ie.ie = 创建对象("InternetExplorer.Application")。

ie->Visible = 1。

ie->Navigate("about:blank")。

等待(ie->ReadyState == 4, 1000)。

ie->Document->Script->eval("alert('Hello from JavaScript!')")。

销毁对象(ie)。

在这个示例中,我们首先创建了一个IE浏览器对象,并设置其可见性。

然后我们让浏览器导航到一个空白页面,并等待页面加载完成。

接下来,我们使用`ie->Document->Script->eval`方法来执行JavaScript代码`alert('Hello from JavaScript!')`,这样就可以在易语言中调用JavaScript方法了。

需要注意的是,由于这种方法是通过IE浏览器对象来执行JavaScript代码的,所以需要保证计算机上安装了IE浏览器,并且IE浏览器的安全设置允许执行JavaScript代码。

另外,由于这种方法依赖于IE浏览器,所以在一些现代化的环境中可能不够稳定和可靠。

除了使用IE内核的COM组件,还可以考虑使用一些第三方的库或者工具来实现易语言与JavaScript的交互,比如使用ActiveX控件或者调用外部的JavaScript解释器等。

但是需要注意的是,这些方法可能需要额外的学习和配置,并且在不同的环境中可能会有一些兼容性和稳定性的问题。

JS函数调用(4种方法)

JS函数调用(4种方法)

JS函数调⽤(4种⽅法)提供了 4 种函数调⽤:⼀般形式的函数调⽤、作为对象的⽅法调⽤、使⽤ call 和 apply 动态调⽤、使⽤ new 间接调⽤。

⼀般形式的函数调⽤在默认状态下,函数是不会被执⾏的。

使⽤⼩括号()可以激活并执⾏函数。

在⼩括号中可以包含零个或多个参数,参数之间通过逗号进⾏分隔。

⽰例1在下⾯⽰例中,使⽤⼩括号调⽤函数,然后直接把返回值传⼊函数,进⾏第⼆次运算,这样可以节省两个临时变量。

1. function f(x,y) { //定义函数2. return x * y; //返回值3. }4. console.log(f(f(5,6), f(7,8))); //返回1680。

重复调⽤函数⽰例2如果函数返回值为⼀个函数,则在函数调⽤时可以使⽤多个⼩括号反复调⽤。

1. function f(x,y) { //定义函数2. return function () { //返回函数类型的数据3. return x * y;4. }5. }6. console.log(f(7,8) ()); //返回56,反复调⽤函数⽰例3设计递归调⽤函数,即在函数内调⽤⾃⾝,这样可以反复调⽤,但最终返回的都是函数⾃⾝。

1. function f() { //定义函数2. return f; //返回函数⾃⾝3. }4. console.log(f() () () () () () () () () () () ()); //返回函数⾃⾝当然,上述设计⽅法在实际开发中没有任何应⽤价值,不建议使⽤。

作为对象的⽅法调⽤当⼀个函数被设置为对象的属性值时,称之为⽅法。

使⽤点语法可以调⽤⼀个⽅法。

⽰例下⾯⽰例创建⼀个 obj 对象,它有⼀个 value 属性和⼀个 increment 属性。

increment ⽅法接收⼀个可选参数,如果该参数不是数字,那么默认使⽤数字 1。

1. var obj = {2. value : 0,3. increment : function (inc) {4. this.value += typeof inc === 'number' ? inc :1;5. }6. }7. obj.increment();8. console.log(obj.value); //19. obj.increment(2);10. console.log(obj.value); //2使⽤点语法可以调⽤对象 obj 的⽅法 increment,然后通过 increment ⽅法改写 value 属性的值。

.net程序设计——考试题库及答案

.net程序设计——考试题库及答案
以下哪个逻辑运算符是按位与操作运算符
收藏 A. ! B. &
C. = D. +
回答错误!正确答案: B
当在程序中执行哪个语句时,将结束所在循环语句的执行
收藏 A. break B. catch C. continue D. end
回答错误!正确答案: A
C#中,派生类只能从_____个类中继承。
收藏 A. 两个 B. 任意多个 C.
收藏 A. params 修饰符可以与 ref 和 out 修饰符组合起来使用 B. 若形参表中含一个参数数组,则该参数数组必须位于形参列表的最后; C.
参数数组必须是一维数组 D. 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字
回答错误!正确答案: A
收藏 A. 数据绑定 B. 数据相关控件 C. 顺序工作流
回答错误!正确答案: A
Class View 工具的目的是从__ 角度显示当前项目里的所有类型。
收藏 A. 面向环境 B. 面向对象 C. 面向内容 D. 面向过程
回答错误!正确答案: B
有关 LINQ 查询表达式另一个重要的地方是在我们迭代内容之前,他们不会真 正的运算,这叫做__ 。
收藏 A. 延迟执行 B. 响应文件 C. 验证控件 D. 业务流程
回答错误!正确答案: A
关于属性与索引器的区别,以下哪种说法不正确
收藏 A. 索引器没有名称 B. 索引器的类型和集合元素的类型一致 C. 索引器至少有一个参数 D. 一个类中只能有一个索引器
回答错误!正确答案: D
__ 是一个运行库类型发现的过程。
一个 D. 一个不能
回答错误!正确答案: C

net core 调用js 方法

net core 调用js 方法

net core 调用js 方法.NET Core调用JavaScript方法介绍在开发过程中,经常会遇到需要在.NET Core应用程序中调用JavaScript方法的情况。

这可以通过使用一些技术和库来实现,本文将详细介绍.NET Core调用JavaScript方法的各种方法。

方法一:使用JS Interop1. 添加依赖在.NET Core项目中,首先需要添加对包的依赖。

可以通过NuGet 包管理器来安装该包。

2. 声明JavaScript函数在JavaScript文件中声明需要在.NET Core中调用的函数。

例如,在文件中创建一个名为”myFunction”的函数:function myFunction() {alert("Hello from JavaScript!");}3. 使用IJSRuntime接口在使用JavaScript函数的.NET Core控制器或视图模型中注入IJSRuntime接口。

在构造函数中添加以下代码:private readonly IJSRuntime _jsRuntime;public MyController(IJSRuntime jsRuntime){_jsRuntime = jsRuntime;}4. 调用JavaScript函数在需要调用JavaScript函数的方法中,使用以下代码将函数名和参数传递给IJSRuntime接口的InvokeAsync方法:public async Task<IActionResult> MyAction(){await _<object>("myFunction");return View();}方法二:使用SignalR1. 添加依赖在.NET Core项目中,首先需要添加对包的依赖。

可以通过NuGet 包管理器来安装该包。

2. 创建Hub在.NET Core应用程序中创建一个SignalR Hub。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文由我司收集整编,推荐下载,如有疑问,请与我司联系
在COM 组件中调用JavaScript 函数
2013/08/13 127 转载自:blog.csdn/cheungmine/article/details/1451489
要求是很简单的,即有COM 组件A 在IE 中运行,使用JavaScript(JS)调用A
的方法longCalc(),该方法是一个耗时的操作,要求通知IE 当前的进度。

这就要求
使用回调函数,设其名称为scriptCallbackFunc。

实现这个技术很简单:
1 、组件方(C++)组件A 的方法在IDL 中定义:
[id(2)]HRESULTlongCalc([in]DOUBLEv1,[in]DOUBLEv2,[in,optional]VARIANTscript Callback); //假设回调原型为:
//scriptCallbackFunc(LONGnCurrentProgress,LONGnTotalProgress,BSTRbstrProgressNa me); //此方法由JS 脚本来实现STDMETHODIMPCA::longCalc(DOUBLEv1,DOUBLEv2,VARIANTscriptCallback) { CComPtr IDispatch spCallback; if(scriptCallback.vt==VT_DISPATCH) spCallback=scriptCallback.pdispVal; //参数准备CComVariantvarResult; CComVariantavarParams[3]; avarParams[0]=“开始计算股票”;//bstrProgressName avarParams[0].vt=VT_BSTR; avarParams[1]=100;//nTotalProgress avarParams[1].vt=VT_I4; avarParams[2]=0;//nCurrentProgress avarParams[2].vt=VT_I4; DISPPARAMSparams={avarParams,NULL,3,0}; if(spCallback) spCallback- Invoke(0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms, varResult,NULL,NULL); BOOLbFinished=false; while(!bFinished) { //计算工作…Sleep(1000); v1=v1+v2; //回调客户if(spCallback) { avarParams[0]=“正在计算股票…”;avarParams[2]=0; spCallback- Invoke(0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms,varResult,NULL,NULL); }
if(…)bFinished=TRUE; }//whileOK! returnS_OK; } //符合回调原型:scriptCallbackFunc。

相关文档
最新文档