*-- TST.PRG
PARAMETERS p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25
MESSAGEBOX( "PCOUNT=" + TRANSFORM(PCOUNT()) )
RETURN
Se me ocurrió lo mismo que ha Ricardo Pina, un archivo de texto conteniendo los datos que necesitas o un archivo ini o una tabla con los datos en campo memo y el lugar de pcount abrirías la tabla y un reccount para saber con cuantos parámetros trabajarías..
Saludos
The command string included with the RUN command is too long. The maximum length allowed is approximately 240 characters.
Dim WSHShell
Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set oVFP9 = CreateObject("VisualFoxPro.Application.9")
nExitCode = 0
nDebug = 0
If WScript.Arguments.Count = 0 Then
nExitCode = 1
MsgBox "Sin parámetros"
Else
If nDebug = 1 Then
cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "tst_diff.bat")
cCMD = chr(34) & cEXETool & chr(34) & " " & chr(34) & WScript.Arguments(0) & chr(34)
Else
cEXETool = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxpro_plasticscm_dm.exe")
cCMD = "DO " & chr(34) & cEXETool & chr(34) & " WITH " & chr(34) & WScript.Arguments(0) & chr(34)
End If
For I = 1 To WScript.Arguments.Count - 1
cCMD = cCMD & "," & chr(34) & WScript.Arguments(I) & chr(34)
Next
If nDebug = 1 Then
MsgBox cCMD, 0, "PARÁMETROS ENVIADOS"
WSHShell.Run( cCMD )
Else
oVFP9.DoCmd( cCMD )
nExitCode = oVFP9.Eval("_SCREEN.ExitCode")
End If
End If
WScript.Quit(nExitCode)
LPARAMETERS p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25
#DEFINE CR CHR(13)
SET SAFETY OFF
TRY
LOCAL lsBuffer, lnAddress, lnBufsize, lnPcount
lnPcount = PCOUNT()
IF lnPcount = 0 && Fox no los ve... pero están ahí :)
* Obtengo la linea completa de comandos
* Adaptado de http://www.news2news.com/vfp/?example=51&function=78
DECLARE INTEGER GetCommandLine IN kernel32
DECLARE INTEGER GlobalSize IN kernel32 INTEGER hMem
DECLARE RtlMoveMemory IN kernel32 As CopyMemory STRING @Destination, INTEGER Source,
INTEGER nLength
lnAddress = GetCommandLine() && returns an address in memory
lnBufsize = GlobalSize(lnAddress)
* allocating and filling a buffer
IF lnBufsize <> 0
lsBuffer = REPLICATE(CHR(0), lnBufsize)
= CopyMemory(@lsBuffer, lnAddress, lnBufsize)
ENDIF
lsBuffer = CHRTRAN(lsBuffer, CHR(0)+'"', " ")
FOR I = 1 TO OCCURS("'", lsBuffer) / 2
STORE STREXTRACT(lsBuffer, "'", "'", I*2-1, 0) TO ([p] + TRANSFORM(I))
lnPcount = lnPcount + 1
ENDFOR
RELEASE lsBuffer, lnAddress, lnBufsize
ENDIF
LOCAL loEx AS EXCEPTION
MESSAGEBOX( "Pcount=" + TRANSFORM(PCOUNT()) ;
+ CR + 'p1=(' + TRANSFORM(LEN(EVL(p1,''))) + ') ' + EVL(p1,'') ;
+ CR + 'p2=(' + TRANSFORM(LEN(EVL(p2,''))) + ') ' + EVL(p2,'') ;
+ CR + 'p3=(' + TRANSFORM(LEN(EVL(p3,''))) + ') ' + EVL(p3,'') ;
+ CR + 'p4=(' + TRANSFORM(LEN(EVL(p4,''))) + ') ' + EVL(p4,'') ;
+ CR + 'p5=(' + TRANSFORM(LEN(EVL(p4,''))) + ') ' + EVL(p5,'') ;
+ CR + 'p6=(' + TRANSFORM(LEN(EVL(p4,''))) + ') ' + EVL(p6,'') ;
+ CR + 'p7=(' + TRANSFORM(LEN(EVL(p4,''))) + ') ' + EVL(p7,'') ;
+ CR + 'p8=(' + TRANSFORM(LEN(EVL(p5,''))) + ') ' + EVL(p8,'') )
CATCH TO loEx
MESSAGEBOX( loEx.MESSAGE,0+16+4096,"Error",30000 )
ENDTRY
RETURN