Microsoft KB Archive/139070

= PRB: Stack Violation Calling 16-Bit DLL with FoxTools =

Article ID: 139070

Article Last Modified on 2/11/2000

-

APPLIES TO


 * Microsoft Visual FoxPro 3.0 Standard Edition

-



This article was previously published under Q139070



SYMPTOMS
Using the FOXTOOLS CallFnfunction to call a 16-bit DLL and passing a "L" as an argument generates the error "Stack Violation. Please check the parameters." The same function call works well with FoxPro for Windows versions 2.x.



CAUSE
The function is registered and called as follows. Int_num=regfn("Fn_init","L","I", "") Int_ret=callfn(int_num,0) In this call, the "L" parameter, which represents a long argument, is passed to the DLL. The API function expects a short argument, and the stack allocated for the parameter is filled. The "S" argument, which represents a short integer, should be passed instead.

In the version of Foxtools shipped with FoxPro versions 2.x for Windows the "S" argument was not valid. Additionally, the version of Foxtools.fll shipped with Visual FoxPro version 3.0 checks parameters more strictly than previous versions.



RESOLUTION
When registering a function from a 16-bit DLL, pass an "S" instead of an "L" as in this example: Int_num=regfn("Fn_init","S","I", "") Int_ret=callfn(int_num,0) For more information about Foxtools.fll and the syntax you can use, please see the Foxtools.hlp file located in the Vfp\Tools directory.



STATUS
This behavior is by design.



Steps to Reproduce Behavior
The following example program duplicates the error. To correct it, change the "L" parameter to "S". SET LIBRARY TO HOME+"FOXTOOLS.FLL"           && Locates Foxtools hhand=REGFN("WinHelp","ICIC","I") LPZFILENAME=HOME+"FOXHELP.HLP"+CHR(0) WCOMMAND=258 DWDATA="SEARCH"+CHR(0) MYCALL=MAINHWND HELP =CALLFN(hhand,MYCALL,LPZFILENAME,WCOMMAND,DWDATA) RELEASE HHAND SET LIBRARY TO     && Releases Foxtools

Keywords: KB139070

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.