VFP ·R¥ÎªÌªÀ°Ï ­º­¶ 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¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

NetV8js for zhz

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
iswith



µù¥U®É¶¡: 2022-11-04
¤å³¹: 93


²Ä 1 ¼Ó

µoªíµ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 )
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±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§@