Version 2.0.0.13 -- 2013-08-05
- enhanced SQLExecEx
- SQL_VARCHAR and SQL_WVARCHAR columns are now mapped to the C(x) datatype like in SQLExec,
use CURSORSETPROP('MapVarchar', .T., 0) to alter the mapping to the V(x) datatype
- varchar(max)/varbinary(max) fields from SQL Server are retrieved correctly as Memo/Blob fields when using the SQL Native Client ODBC driver
- added SQLPrepareEx and SQLCancelEx
- added constants for CreateGUID in vfp2c.h
- fixed MemberData generation in VFP2CFront
Version 2.0.0.11 -- 2012-02-04
- enhanced CreateThreadObject - the returned proxy object implments 2 new methods: GetCallQueueSize and GetCallRunTime
- enhanced GetSaveFileName - if a file extension filter is passed, the function appends the selected extension on the entered filename
Version 2.0.0.10 -- 2011-08-11
- fixed a bug in CreateThreadObject which could lead to a dangling object reference on the passed callback object
Version 2.0.0.9 -- 2011-05-24
- removed dependency on msvcp71.dll
- fixed a bug in FGetsEx - file pointer was set incorrectly when retrieving lines in the file and the current file pointer position was greater than 4GB. FGetsEx now also behaves identical to FGets in respect to linefeed carriage return handling.
- fixed a bug in ANetFiles, ANetServers - reported file/server names were truncated.
- changed many functions to direct linking instead of dynamic runtime linking, this has two implications:
1. The mininum operating system supported by VFP2C32 now is Windows 2000
2. Most functions don't need to be initialized with a call to InitVFP2C32 anymore.
- created a thread safe version of the library (vfp2c32t.fll) which you can use inside Visual FoxPro COM servers or for multithreaded development.
- added function: CreateThreadObject - allows you to create COM objects on their own thread and fire off functions calls on these objects asyncronously - or in simple terms: create multithreaded FoxPro programs.
Version 2.0.0.8 -- 2011-01-27
- fixed a bug in BindEventsEx - if you passed an empty string in the "cParmDefinition" parameter the callback function would be called with the default parameters instead of no parameters.
- fixed a potential bug in AProcessModules - the function could fail occassionally.
- fixed a bug in AAverage - if the SUM of all values exceeded the maximum currency or double limit the result was wrong.
- ASum now raises error 1988 "Currency value is out of range." if the result overflows.
- fixed a potential bug in SHCopyFiles, SHMoveFiles, SHRenameFiles and SHDeleteFiles, the function could return 1 for success even if the operation was aborted.
- fixed a potential bug in ARasConnections if there were more than 32 active RAS connections
- extended AllocHGlobal and ReAllocHGlobal, a seconds parameter allows to change the allocation options.
- extended CreateCallbackFunc: added more marshaling modifiers for the STRING, INT64 and UINT64 datatypes.
- extended Colors2RGB and RGB2Colors: the alpha channel of the color can now optionally be set or retrieved.
- extended FCreateEx, FOpenEx, DeleteFileEx: even files with names exceeding MAX_PATH are now supported.
- extended Int64_Add, Int64_Sub, Int64_Mul, Int64_Div and Int64_Mul: the functions now throw errors on numeric overflow or divide by zero and an extra parameter allows to specify the format of the return value.
- extended RasDialDlgEx: two new optional parameters allow to specify a subentry to dial and the owner window.
- extended ReadInt64, ReadPInt64, ReadUInt64 and ReadPUInt64: an extra parameter allows to return the 64 bit integer in different formats.
- extended WriteInt64, WritePInt64, WriteUInt64 and WritePUInt64: the functions now except the 64 bit value in more formats.
- rewritten all marshaling functions that had to be DECLARE'd to use the FLL export mechanism, additionally all marshaling functions now raise error "invalid parameters" if a 0 pointer is passed, and all ReadPxxx functions now return .NULL. if the address passed contains a 0 pointer.
- added functions:
- OsEx
- AVolumes
- AVolumeMountPoints
- AVolumePaths
- CreateService
- DeleteService
- MessageBoxEx
- Int642Str
- Str2Int64
- UInt642Str
- Str2UInt64
- internal code cleanup
Breaking changes!
- changed function AHeapBlocks: removed first column from resulting array since it was of no value.
- changed function ReadRegistryValue: the type and meaning of parameter 4 has changed - have a look at the new documention.
- changed function GetServerTime: the type and meaning of parameter 2 has changed.
- removed functions ReadInt64AsDouble, ReadPInt64AsDouble, ReadUInt64AsDouble and ReadPUInt64AsDouble: use ReadInt64, ReadPInt64 ... instead.
- removed function SetSystemTimeEx: use SetSystemTime instead.
- removed function SyncToServerTime: use SyncToSNTPServer instead.
- removed functions MarshalArrayXXX, UnMarshalArrayXXX, MarshalCursorXXX and UnMarshalCursorXXX: use MarshalCArray2Cursor, MarshalCArray2FoxArray,
MarshalCursor2CArray or MarshalFoxArray2CArray instead.
Version 2.0.0.7 -- 2010-11-16
- fixed a bug in AAverage - NULL values in the array corrupted the result
- removed limitation in ASum, AMin, AMax, AAverage - the functions were limited to 65000 elements, now they're limited to 65000 rows
- ASplitStr now returns a 1 element array with an empty string when an empty string is passed (behaves more like ALINES)
- internal code cleanup and optimization:
- optimized FoxArray class - results in a speedup of 10-20% in many functions which return the result in an array - like AProcesses, AWindows, AdirEx etc.
- optimized C++ API over LCK
- replaced C-style casts with C++ casts
- removed almost all preprocessor macros
Version 2.0.0.6 -- 2010-11-08
- changed FCreateEx, FOpenEx, and all other F...Ex functions to use the windows api file handle directly instead of an internal pseudo handle.
If you already have code written using these functions they work still like the old version, the only two differences are that the
function "FHandleEx" which returned the api file handle previously is removed now since it isn't needed anymore, and "AFHandlesEx"
now returns a 1 column array of api handles instead of a 2 column array with the mapping of internal handles to api handles.
This change has the advantage that now any file/pipe/whatever api handle (not necessarily created with FCreateEx or FOpenEx) can be used with the FPutsEx, FWriteEx, FReadEx ...
functions.
- changed copyright notice in FLL resource (AGETFILEVERSION())
- CLSIDFromProgID now returns a binary string (like created with CREATEBINARY) instead of a normal string - should not affect any code using it already - just cosmetics since the CLSID returned is actually binary data
- CreateGUID now also returns a binary string (only when 2 is passed as a parameter)
- fixed a bug in CLSIDFromString - the function always returned an empty string
- fixed a bug in ARegistryKeys - the function raised error "access denied" cause the registry key was not opened with sufficient rights
- internal code cleanup:
- revised the C++ API over the LCK
- replaced many C-style casts with C++ casts
- removed more macros
Version 2.0.0.5 -- 2010-11-05
- added functions:
- APaperSizes
- AServiceConfig
- ADependentServices
- WaitForServiceStatus
- AFontInfo
- ARasDevices
- ARasPhonebookEntries
- RasPhonebookDlgEx
- RasDialEx
- RasHangUpEx
- RasGetConnectStatusEx
- RasDialDlgEx
- RasConnectionNotificationEx
- AbortRasConnectionNotificationEx
- RasClearConnectionStatisticsEx
- CreatePublicShadowObjReference
- ReleasePublicShadowObjReference
- GetLocaleInfoEx
- AsyncWaitForObject
- CancelWaitForObject
- renamed functions:
- "Invoke" to "IDispatch_Invoke"
- "AsyncInvoke" to "IDispatch_AsyncInvoke"
- "ADialUpConnections" to "ARasConnections"
- fixed some memory leaks in various functions which occured in an error condition
- interal code cleanup - replaced many of the preprocessor marcros with C++ inline functions
- removed hardcoded threadlimit in FindFileChange & FindRegistryChange
Version 2.0.0.3
- fixed a bug in the AbortUrlDownloadToFileEx function,
abortable asynchronous downloading of internet resources with progress monitoring works now flawlessly,
see updated example
updated Intellisense table for UrlDownloadToFileEx/AbortUrlDownloadToFileEx
Version 2.0.0.2
- fixed parameter verification in SQLExecEx - callback functionality was not useable
Version 2.0.0.1
- fixed ClsIdFromProgID - function returned an empty string instead of the CLSID
- fixed CreateCallbackFunc - the last parameter expects a numerical flag, but only a logical value was accepted
- enhanced ADirEx, AFileAttributes(Ex) & Get(Set)FileTimes, file times can now be retrieved/set as UTC times
Version 2.0.0.0
- fixed the BINDSTATUS #DEFINE's in vfp2c.h
- extended UrlDownloadToFile, the function can now be executed asyncronous on a different thread
- added function AbortUrlDownloadToFileEx to abort an asyncronous download started with UrlDownLoadToFileEx
- added function Decimals, which returns the number of decimals of a numeric value
- added functions MoveFileEx & CopyFileEx (move/copy files with progress callback)
- added marshaling functions: ReadPInt64AsDouble, ReadPUInt64AsDouble, WriteInt64, WritePInt64, WriteUInt64, WritePUInt64
- added function CreateGuid
- added function CenterWindowEx
- enhanced function CreateCallbackFunc - C callback functions that are called from a different thread are now supported
- added function ControlService
- added function APrintersEx
- added function IcmpPing
- rewritten large parts of the FLL with a new set of C++ classes that wrap the Fox Library construction kit (vfp2ccppapi.cpp/h)
Version 1.0.3.5
- added function Value2Variant & Variant2Value
- added VFP like extended file functions:
FCreateEx, FOpenEx, FCloseEx, FReadEx, FWriteEx, FGetsEx, FPutsEx, FSeekEx, FEoFEx,
FChSizeEx, FFlushEx, FLockFile, FUnlockFile, FLockFileEx, FUnlockFileEx, FHandleEx, AFHandlesEx
Version 1.0.3.4
- added function ADialUpConnections
- added function Ip2MacAddress
- updated/added alot of functions in the Intellisense script
- added function PauseService & ContinueService
- enhanced StopService, depenant services are now stopped in an recursive algorithm
- fixed bugs in FindFileChange & FindRegistryChange:
the functions worked as expected before but if the limit of notifications slots was reached the error handling was incorrect
Version 1.0.3.3
- enhanced ANetFiles, also works on Win95/98/Me now
- enhanced AProcesses, also works on WinNT now (if psapi.dll is present)
- enhanced all functions that take a filename as a parameter:
GetFileSize, AFileAttributes(Ex), Get(Set)FileAttributes, Get(Set)FileTimes,
CompareFileTimes, GetLongPathName, GetShortPathName, GetFileOwner, DeleteFileEx -
one don't has to specify the fullpathname of the file anymore, internally the VFP
function FULLPATH is now used to retrieve the fullpath of the file.
- enhanced GetOpenFileName & GetSaveFileName:
both functions now optionally can call a VFP callback procedure while the dialog is running (for dialog events, customizing dialog appearance).
and GetOpenFileName takes as an extra parameter an arrayname into which a multiple file selection is stored (see dialogs.prg example)
- added function Int64_Add, Int64_Sub, Int64_Mul, Int64_Div, Int64_Mod to do simple arithmetic on Int64 literals
- added function AIPAddresses - store IP addresses of the local machine into an array
- added function ResolveHostToIp - get IP address of a server in your domain or from a toplevel domain e.g. www.google.com
- added function GetWindowRectEx - stores screen coordinates of a window into an array
Version 1.0.3.2
- SQLExecEx enhancements/fixes:
- SQL_BIGINT is now converted to a character (C(20)) column by default
- SQL_GUID is now converted to a character (C(36)) column by default
- removed General field support, the content was successfully stored into a general field before as is, but the general field was invalid in VFP.
- unknown SQL types are now converted to a character/memo field by default depending on size (xml datatype in MS SQL Server for example)
- fixed bug when decimals had bigger precision or scale than is supported in VFP.
- added flag SQLEXECEX_STORE_INFO, output of PRINT statements or other commands can be stored in an array
- added new optional parameter nCallbackInterval - specifies interval in records when the callback progress function should be called (before 100 was the default)
- fixed callback functionality - "Invalid parameters" error was risen when more than 7 parameters were passed to SQLEXECEX
- fixed some non working datatype conversions
- .NULL. values are now retrieved into memo/blob fields properly
- SQL_DEST_VARIABLE now supports all datatypes, large types (SQL_LONGVARCHAR, SQL_LONGBINARY, SQL_WLONGVARCHAR ..) weren't stored.
- SQL_FLOAT, SQL_REAL & SQL_DOUBLE are now by default converted to B(16) datatype instead of N(20,16).
- memo/blob fields that were specified as parameters inside the SQL statement are now send properly
- fixed bug when a SQL_CHAR or SQL_BINARY column was bigger than 254 bytes, it's converted to a memo/blob field now, before error "invalid field length" was risen
- fixed bug in storing money datatype with SQLGetData - error "datatype mismatch" was risen
- fixed bug in parsing the cursorschema, decimal precision of N(X,X) was lost, resulting into N(X,0)
- if data should be converted to currency, it's retrieved now as SQL_CHAR since most ODBC drivers doesn't support the SQL_C_NUMERIC type that was used before
- added functions ASum, AAverage, AMax & AMin
Version 1.0.3.1
- fixed a bug in ADIREX that was introduced in one of the last development releases.
- added function OpenService, CloseServiceHandle & AServiceStatus
- function AServices now always creates an array with 10 dimension regardless of OS in use, and on WinNT the last two columns are set to 0
Version 1.0.3.0
- added functions GetWindowsDirectory, GetSystemDirectory & ExpandEnvironmentStrings
- added functions GetLongPathName, GetShortPathName
- added function RegisterObjectAsFileMoniker
Version 1.0.2.9
- added function GetWindowTextEx
- changed flags for BindEventsEx - see Intellisense help.
- fixed a bug in UnBindEventsEx, when more than one window was subclassed
- fixed yet another bug in BindEventsEx that occured when you rebind a message that was previously hooked to another object, the first object was released from memory.
Version 1.0.2.8
- fixed a critical bug in BINDEVENTSEX for callbacks on an object method
Version 1.0.2.7
- added functions BindEventsEx & UnbindEventsEx
- added function GetCursorPosEx
- added functions StartService & StopService
- rewritten InitVFPC32(), doesn't stop initialzing independent parts of the libary if an error occurs
- corrected initialization #DEFINES in vfp2c.h
Version 1.0.2.6
- corrected bug in SQLExecEx if you tried to pass NULL or empty date(time)s as parameters.
- added flag SQLEXECEX_REUSE_CURSOR to SQLExecEx function
- added functions RGB2Colors & Colors2RGB
Version 1.0.2.5
- finished SQLExecEx
extended SQLExec with storage of updated/deleted/inserted rows, progress callback & custom cursorschema support ..
we needed that years ago don't we? :-)
since this function is rather complex (about 1300 lines of code in itself and the 30 helper functions) i put it into this development release first ..
- fixed bug in ODBC errorhandler - AErrorEx returned wrong number of errors
- added function ATimeZones - enumerate all available times zones on the system
- added functions DT2UTC & UTC2DT to convert datetimes from UTC/GMT to local time and vice versa
- added function SyncToSNTPServer - sync to an SNTP (Time) Server on the internet or local network (for all OS's)
- changed GetSystemTime & GetServerTime - both now return the time instead of storing it into a variable passed by reference
if you're using these functions you'll have to adjust your code - backward compatibilty isn't my highest priority.
If I make a fault in a function interface (like in this case) i'll correct it as soon as possible.
Version 1.0.2.0
- fixed SetFileTimes - was completly messed up ..
- added functions to convert numeric types into binary strings and vice versa:
Str2Short, Short2Str, Str2Long, Long2Str, Str2ULong, ULong2Str, Str2Double, Double2Str, Str2Float, Float2Str ..
- added functions RegisterActiveObject, RevokeActiveObject - to register COM objects into the running object table
- fixed bug in internal helper function DateTimeToFileTimeEx (for those that use the source code or are interested in)
- added function RegistryHiveToObject - builds an object hierarchie with values and subkeys of a registry key in one call
- fixed a minor bug in SHFileOperation wrappers (SHCopyFiles, SHDeleteFiles, SHMoveFiles, SHRenameFiles)
if you passed a title to for the dialog to one of these function's but didn't specify the FOF_SIMPELPROGRESS flag the title was ignored,
now the FOF_SIMPLEPROGRESS flag is added if you pass a title
- added function ASplitStr - split a string into an array of N fixed length strings
Version 1.0.1.0
- added functions SyncToServerTime & RegistryValuesToObject
- enhanced ADIREX and fixed a small bug in it