 |
VFP ·R¥ÎªÌªÀ°Ï ¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
|
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD |
µoªí¤H |
¤º®e |
iswith
µù¥U®É¶¡: 2022-11-04 ¤å³¹: 93
²Ä 1 ¼Ó
|
µoªí©ó: ¬P´Á¤G ¤C¤ë 09, 2024 6:09 pm ¤å³¹¥DÃD: NetV8js for zhz |
|
|
Clear
Public cPath
m.cPath = Justpath( Sys(16) )
Set Default To ( m.cPath )
Set Procedure To netsuite.reg.prg
Public oNetV8js
oNetV8js = createobjects( "NetV8Js.V8Js" , "NetV8Js.dll")
*¤ä«ù VBScript¡BJavaScript ©M V8
*--ª`·N¤£n¨Ï¥Î¡§["|"]"来°µ¦r²Å¦ê©w¬É²Å
*--¦bV8¤ÞÀº¤Wª`¤J_VFP,¥H«K¦bJS¤¤¥æ¤¬调¥ÎVFP¨ç数
oNetV8js.AddHostObject( "_vfp" , _vfp )
*--¦bV8js给VFP A变¶q赋È
Text To m.lcSetVar noShow
_vfp.SetVar( "A" , 123456789 )
Endtext
oNetV8js.Execute( m.lcSetVar )
?"A变¶qÈ¡G"
?A
*--¦bV8js调¥ÎVFP写ªº¨ç数传参
Set Safety Off
Text To m.lcVFPscript noShow
Procedure Aa( a as Integer , b as Integer )
Return a+b
Endproc
Endtext
Strtofile( m.lcVFPscript , "V8test1.prg" )
Text To m.lcDoCmdstr noShow
_vfp.DoCmd( "Execscript( 'set Procedure to V8test1.prg Additive ' + Chr(13) + '?? Aa(1,2)')")
Endtext
?"¦bV8js调¥ÎVFP¨ç数:"
oNetV8js.Execute( m.lcDoCmdstr )
*--¦bV8Js ²K¥[C# ªºµ{§Ç¶° ¥H«K¥i¥H动态执¦æC#¥N码,¥H¤Uµ{§Ç¶°参¦Ò
*µ{§Ç¶°参¦ÒÊI§}:
*https://learn.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/ee461503(v=vs.100)?redirectedfrom=MSDN
*!* mscorlib.dll
*!* System.Core.dll
*!* System.Data.dll
*!* System.Data.OracleClient.dll
*!* System.Design.dll
*!* System.dll
*!* System.EnterpriseServices.dll
*!* System.Web.dll
*!* System.Web.Mobile.dll
*!* System.Xaml.dll
*!* System.Xml.dll
*NetV8Js参¦ÒÊI§}¡G
*https://microsoft.github.io/ClearScript
*¦p®æ¦¡¤Æ¤@个¤é´Á
Local lolib
m.lolib = oNetV8js.CreateHostTypeCollection( "mscorlib", "System.Core" )
oNetV8js.AddHostObject( "lib" , m.lolib )
Text To m.lcVFPscript noshow
birthday = new lib.System.DateTime(2007, 5, 22);
_vfp.SetVar( "birthday", birthday.ToLongDateString() )
endtext
oNetV8js.Execute(m.lcVFPscript)
?"运¦æC#®æ¦¡¤Æ¤@个¤é´Á,birthday:"
??birthday
*--¦bV8Js ¨D当«e时间
Text To m.lcVFPscript noshow
Datetime = lib.System.DateTime.Now;
_vfp.SetVar( "Datetime", Datetime );
endtext
oNetV8js.Execute(m.lcVFPscript)
?"¦bV8Js 运¦æC# ¨D当«e时间,Datetime:"
??Datetime
*--¦bV8Js ©wúå¤@个¦r¨å,¦}²K¥[foo , 123
Text To m.lcVFPscript noshow
Dictionary = lib.System.Collections.Generic.Dictionary;
dict = new Dictionary(lib.System.String, lib.System.Int32);
dict.Add('foo', 123);
endtext
?"¦bV8Js 运¦æC# ©wúå¤@个¦r¨å,¦}²K¥[foo,123"
oNetV8js.Execute(m.lcVFPscript)
*--¦bV8Js ©wúå¤@个¦r¨å,¬d§äfoo ¥BªðÈ: 123
Local loHost
m.loHost = oNetV8js.CreateHostFunctions()
oNetV8js.AddHostObject( "host" , m.loHost )
Text To m.lcVFPscript noshow
intVar = host.newVar(lib.System.Int32);
found = dict.TryGetValue('foo', intVar.out);
_vfp.SetVar( "found" , found )
_vfp.SetVar( "intVar" , intVar )
endtext
oNetV8js.Execute(m.lcVFPscript)
?"¦bV8Js ©wúå¦r¨å,¬d§äfoo ¥B还¦^È: 123"
?"found:"
??found
?"intVar:"
??intVar
*--执¦æ¤@个V8Js¨ç数,环¹ÒÀq认¬O¼Ò块¤Æªº执¦æ,»Ýn¨Ï¥ÎES6¼Ò块¨t统ªº¯S©Ê
Text To m.lcVFPscript noshow
function GetValue(a,b,c){ return a+b+c; }
_vfp.SetVar("GetValue" , GetValue(1,2,3) )
Endtext
oNetV8js.Execute( m.lcVFPscript )
?"执¦æ¤@个JS¨ç数GetValue,将执¦æ¨ç数结ªG输¥X¨ìVFP变¶q¡§GetValue¡¨:"
??_vfp.Eval( "GetValue" )
m.cPath = Addbs( m.cPath )
m.cPath = Strtran( m.cPath , "\" , "/" )
*--载¥~¤JJS¡A执¦æ¤@个JS¨ç数
Text To m.lcVFPscript Textmerge noshow
import * as Arithmetic from '<<m.cPath >>JavaScript/StandardModule/Arithmetic/Arithmetic.js';
import * as Arithmetic1 from '<<m.cPath >>JavaScript/StandardModule/Arithmetic/Arithmetic.bogus';
import * as Geometry from '<<m.cPath >>JavaScript/StandardModule/Geometry/GeometryWithDynamicImport.js';
_vfp.SetVar("Add" , Arithmetic.Add(123, 456) );
_vfp.SetVar("BogusAdd" , Arithmetic1.BogusAdd(123, 456) );
_vfp.SetVar("Area" , new Geometry.Square(25).Area);
endtext
oNetV8js.EvaluateStandard( m.lcVFPscript )
?"执¦æJavaScript/StandardModule/Arithmetic/Arithmetic.js"
?"Add:"
??_vfp.Eval("Add")
?"BogusAdd:"
??_vfp.Eval("BogusAdd")
?"Area"
??_vfp.Eval("Area")
*--Set path to ¸ô径¤è¦¡,¤]¥i¥H¬OHttp,¤£¤@©w¬O¥»¦a
oNetV8js.SearchPath = m.cPath + [JavaScript/StandardModule/Arithmetic] + [;] + ;
m.cPath + [JavaScript/StandardModule/Geometry]
Text To m.lcVFPscript Textmerge noshow
import * as Arithmetic from 'Arithmetic.js';
import * as Arithmetic1 from 'Arithmetic.bogus';
import * as Geometry from 'GeometryWithDynamicImport.js';
_vfp.SetVar("Add" , Arithmetic.Add(123, 456) );
_vfp.SetVar("BogusAdd" , Arithmetic1.BogusAdd(123, 456) );
_vfp.SetVar("Area" , new Geometry.Square(25).Area);
endtext
oNetV8js.EvaluateStandard( m.lcVFPscript )
?"执¦æJavaScript/StandardModule/Arithmetic/Arithmetic.js"
?"Add:"
??_vfp.Eval("Add")
?"BogusAdd:"
??_vfp.Eval("BogusAdd")
?"Area"
??_vfp.Eval("Area")
*--执¦æ¤@个V8Js¨ç数,¦b¥N码处¤Þ¥Î¥~³¡¼Ò块
*ES7 ¤Þ¤J¤F async/await¡A这¬O JavaScript ÉݨB编µ{ªº¤@个«¤j§ï进¡A
*´£¨Ñ¤F¦b¤£ªý¶ë¥D线µ{ªº±¡úG¤U¨Ï¥Î¦P¨B¥N码实现ÉݨB访问资·½ªº¯à¤O¡A¦}¥B¨Ï±o¥N码逻辑§ó¥[²M´·¡C
*V8 ¤ÞÀºª©¥»对 await ªº处²z¤£¤@ý©
Text To m.lcVFPscript Textmerge noshow
async function async1()
{
_vfp.DoCmd ("clear")
_vfp.DoCmd ("?'async1 start'");
await async2();
_vfp.DoCmd ("?'async1 end'");
}
async function async2(){
_vfp.DoCmd ("?'async2'");
}
_vfp.DoCmd ("?'script start'");
//setTimeout(() => {
// _vfp.DoCmd ("?'setTimeout'" );
//})
async1();
new Promise((resolve) => {
_vfp.DoCmd ("?'promise1'" );
resolve()
})
.then(() => {
_vfp.DoCmd ("?'promise2'" );
})
_vfp.DoCmd ("?'script end'");
endtext
oNetV8js.EvaluateStandard( m.lcVFPscript ) |
|
¦^³»ºÝ |
|
 |
|
|
±z µLªk ¦b³oÓª©±µoªí¤å³¹ ±z µLªk ¦b³oÓª©±¦^ÂФ峹 ±z µLªk ¦b³oÓª©±½s¿è¤å³¹ ±z µLªk ¦b³oÓª©±§R°£¤å³¹ ±z µLªk ¦b³oÓª©±¶i¦æ§ë²¼ ±z µLªk ¦b³oÓª©±ªþ¥[ÀÉ®× ±z µLªk ¦b³oÓª©±¤U¸üÀÉ®×
|
Powered by phpBB © 2001, 2005 phpBB Group ¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@
|