With Fpole.dll, you can run Visual FoxPro commands and evaluate Visual FoxPro expressions from applications that allow API calls but do not support Automation.
Fpole.dll contains six the following functions.
To | See |
Run a Visual FoxPro command. | FoxDoCmd( ) |
Evaluate a Visual FoxPro expression | FoxEval( ) |
Specify whether error messages are displayed in message boxes. | SetErrMode( ) |
Specify the OLE class that FoxDoCmd( ) and FoxEval( ) create. | SetOleObject( ) |
Close the OLE object created when you use FoxDoCmd( ) or FoxEval( ). | CloseIt( ) |
Retrieve the last error that occurred. | GetLastErr( ) |
Runs a Visual FoxPro command from an application that allows API calls.
Syntax
nSuccess = FoxDoCmd(cFoxCommand, cOptions)
Returns
Integer
Arguments
cFoxCommand
Specifies the Visual FoxPro command to run.
cOptions
One or more of the following.
Setting | Description |
(Blank) Runs the specified command without activating the main Visual FoxPro window. | |
a | Activates the main Visual FoxPro window and runs the specified command. |
i | If Visual FoxPro is not running, activates Visual FoxPro without making the Visual FoxPro window visible. |
t | If another program is already running in Visual FoxPro, displays an error message rather than executing cFoxCommand. |
Remarks
Returns 0 if the Visual FoxPro command is successfully executed; -1 otherwise.
If Visual FoxPro is already running, FoxDoCmd( ) sends the command to Visual FoxPro. If Visual FoxPro is not already running, FoxDoCmd( ) runs Visual FoxPro and sends the command.
Example
*In Visual FoxPro
DECLARE integer FoxDoCmd in "FPOLE.DLL" string,string
=FoxDoCmd("SELECT * FROM customer","at")
Evaluates a Visual FoxPro expression from an application that allows .dll calls.
Syntax
nExprLen = FoxEval(cExpression, cBuffer, nLen)
Returns
Integer
Arguments
cExpression
The Visual FoxPro expression to evaluate.
cBuffer
Where to store the value of the Visual FoxPro expression.
nLen
The length of cBuffer.
Remarks
Returns the length of the string stored in cBuffer if successful; -1 otherwise.
You need to pass the cBuffer argument by reference rather than by value for Visual FoxPro to be able to store a value in the buffer. In Visual FoxPro, for example, declare the function with @ after the second string. Arguments are passed by reference by default in Word Basic.
Because there is no way to create and read a buffer in a Help file macro, this function is not useful as a registered routine in Help.
Example
*In Visual FoxPro
DECLARE integer FoxEval in (MYDLL) ;
string, string @, integer
cBuff = SPACE(100)
=FoxEval("TTOC(DATETIME())", @cBuff, 100)
?cBuff
Specifies whether or not error messages from Fpole.dll are displayed in message boxes.
Syntax
nSuccess = SetErrMode(nErrMode)
Returns
Integer
Arguments
nErrMode
One of the following.
Setting | Description |
0 | Error messages are not displayed in message boxes. |
1 | (Default) Error messages are displayed in message boxes. |
Remarks
Returns 0 if the mode was successfully set; -1 otherwise.
Specifies the OLE class that calls to FoxDoCmd( ) and FoxEval( ) create.
Syntax
nSuccess = SetOleObject(cOLEClass)
Returns
Integer
Remarks
Returns 0 if the class was specified successfully; -1 otherwise.
Specify your application in SetOLEObject( ) to allow Automation from applications that don’t natively support Automation.
Example
DECLARE integer SetOLEObject in (MYDLL) string
=SetOleObject("visualfoxpro.application")
Closes the OLE object created when you use FoxDoCmd( ) or FoxEval( ).
Syntax
nSuccess = CloseIt( )
Returns
Integer
Remarks
Returns 0 if the object was removed successfully; -1 otherwise.
Retrieves the last error that occurred.
Syntax
nErrLen = GetLastErr(cBuffer, nLen)
Returns
Integer
Arguments
cBuffer
Where to store the error message.
nLen
The length of cBuffer.
Remarks
Returns the length of the string stored in cBuffer if successful; -1 otherwise.
You need to pass the cBuffer argument by reference rather than by value for Visual FoxPro to be able to store a value in the buffer. In Visual FoxPro, for example, declare the function with @ after the second string. Arguments are passed by reference by default in Word Basic.
Because there is no way to create and read a buffer in a Help file macro, this function is not useful as a registered routine in Help.
The following examples demonstrate using functions in Fpole.dll from Visual FoxPro, a Help file, and Word Basic.
MYDLL = "C:\Program Files\Microsoft Visual Studio\Vfp98\Fpole.dll
DECLARE integer SetOleObject in (MYDLL) string
DECLARE integer FoxDoCmd in (MYDLL) string,string
DECLARE integer FoxEval in (MYDLL) ;
string, string @,integer
=SetOleObject("visualfoxpro.application")
?FoxDoCmd("wait wind 'test' timeout 2","")
?FoxDoCmd("modi proj xx2 nowait ","")
?FoxDoCmd("close all","")
clear dlls
RegisterRoutine("fpole.dll","FoxDoCmd","SS")
HotSpotText!FoxDoCmd("DO (HOME() + 'myprg')","at")
Declare Sub FoxDoCmd Lib "C:\Program Files\Microsoft Visual Studio\Vfp98\Fpole.dll" (cCommand As String, cOptions As String)
Sub MAIN
FoxDoCmd "USE (HOME(2) + 'Data\Customer')", "i"
FoxDoCmd "_CLIPTEXT = customer.company", "i"
EditPaste
End Sub
This example presents a dialog box so that a user can choose a customer ID from a list. The associated company name and contact are then inserted into the Word document.
'Declare the Fpole.dll functions.
'--------------------------------
Declare Sub SetOleObject Lib "C:\Program Files\Microsoft Visual Studio\Vfp98\Fpole.dll(cApp As String)
Declare Sub FoxDoCmd Lib "C:\Program Files\Microsoft Visual Studio\Vfp98\Fpole.dll(cCommand As String, BringToFront As String)
Declare Sub FoxEval Lib "C:\Program Files\Microsoft Visual Studio\Vfp98\Fpole.dll(cExpression As String, cBuff As String, nLen As Integer)
Declare Sub CloseIt Lib "C:\Program Files\Microsoft Visual Studio\Vfp98\Fpole.dll
Sub MAIN
Dim cBuffer$
cBuffer$ = String$(50, " ")
Dim aCustID$(5)
aCustID$(0) = "BLONP"
aCustID$(1) = "CHOPS"
aCustID$(2) = "ISLAT"
aCustID$(3) = "LETSS"
aCustID$(4) = "SEVES"
cboCustID = 0'1st element in the array
Begin Dialog UserDialog 404, 150, "Calling Visual FoxPro with Fpole.dll"
DropListBox 44, 33, 160, 108, aCustID$(), .cboCustID
Text 15, 14, 268, 13, "Choose a Customer ID from the list.", .Text2
Text 15, 61, 231, 13, "Then Choose OK to insert the ", .Text4
Text 15, 78, 215, 13, "Company Name and Contact", .Text5
Text 15, 95, 141, 13, "into your document.", .Text6
OKButton 298, 76, 88, 21
CancelButton 299, 111, 88, 21
End Dialog
Dim dlg As UserDialog
nButtonChoice = Dialog(dlg)
' If the user presses "Cancel"...
'--------------------------------
If nButtonChoice = 0 Then
Goto EndOfSub
End If
' Automate Visual FoxPro
'-----------------------
Print "Opening Visual FoxPro"
SetOleObject "visualfoxpro.application"
FoxDoCmd "USE (HOME(2) + 'Data\Customer')", "i"
FoxDoCmd "LOCATE FOR cust_id = " + Chr$(39) + aCustID$(dlg.cboCustID) + Chr$(39), "i"
Insert "Customer ID" + Chr$(9)
FoxEval "cust_id", cBuffer$, 50
Insert RTrim$(cBuffer$)
InsertPara
Insert "Company:" + Chr$(9)
FoxEval "company", cBuffer$, 50
Insert RTrim$(cBuffer$)
InsertPara
FoxEval "contact", cBuffer$, 50
Insert "Contact: " + Chr$(9) + RTrim$(cBuffer$)
InsertPara
Print "Closing Visual FoxPro"
CloseIt
Print " "
EndOfSub:
End Sub