* harbour/src/pp/Makefile
* harbour/src/pp/hbpp.c
! fixed compilation with HB_DYNLIB macro
- harbour/src/vm/maindll.c
- removed unused dummy file
* harbour/src/vm/Makefile
* harbour/include/hbapi.h
+ harbour/src/vm/procaddr.c
+ added hb_vmProcAddress() function
* harbour/include/hbdefs.h
+ added HB_EXPORT_ATTR and HB_IMPORT_ATTR macros - they are always
defined regardless of HB_DYNLIB macro state
* harbour/src/vm/maindllh/Makefile
* disabled HB_DYNLIB
* harbour/src/vm/maindllp/Makefile
+ harbour/src/vm/maindllp/dllpcode.c
+ added new import library for PCODE DLLs. It contains wrappers for
hb_vmProcessSymbols() and hb_vmExecute() implemented in a way
which creates minimal speed overhead.
+ added error reporting (MessageBox()) when redirected functions
cannot be found.
+ added hb_dllGetProcAddress() C function
* harbour/include/hbtypes.h
- harbour/src/vm/maindllp.c
+ harbour/src/vm/maindllp/dllext.c
* moved old wrappers to some of extended and array API functions
into separate file
* updated to use hb_dllGetProcAddress()
- removed functions which should not be used by user code
% cleaned, optimized and added error reporting to function wrappers.
I do not know who chose exported functions but it looks like a
quite random set which should be extended for real functionality.
If someone is interested then he can do that. I updated this file
only for backward compatibility.
Above modifications allows to use PCODE DLLs with any application
also static ones using Harbour compiled without exported symbols.
It's enough to link it with this function:
HB_EXPORT_ATTR PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
{
return hb_vmProcAddress( szFuncName );
}
The official form of including above function to final binaries is not
defined yet.
* harbour/src/vm/Makefile
* enable HB_HVM_ALL=yes in OpenWatcom C builds - it does not cause such
huge compile time overheads as in C++ mode
* harbour/src/vm/dynlibhb.c
* generate TODO warning also in DOS builds when HB_LIBLOAD()/HB_LIBFREE()
is unsupported
* harbour/include/hbwince.h
! fixed recent modification
* harbour/include/Makefile
+ harbour/include/hbapistr.h
* harbour/src/vm/Makefile
* harbour/src/vm/hvmall.c
+ harbour/src/vm/strapi.c
+ added new C functions to extract strings in different encoding:
void * hb_itemGetStr( PHB_ITEM pItem, void * cdp,
const char ** pStrPtr, ULONG * pulLen );
void * hb_itemGetStrUTF8( PHB_ITEM pItem,
const char ** pStrPtr, ULONG * pulLen );
void * hb_itemGetStrU16( PHB_ITEM pItem, int iEndian,
const HB_WCHAR ** pStrPtr, ULONG * pulLen );
extract from given item string in requested encoding and store pointer
to this string and its size in characters in last two parameters.
These functions return handler which is used to lock memory buffer
with result or NULL if given item does not contain string. All not NULL
handles returned by above functions have to be free by hb_strfree()
function:
void hb_strfree( void * hString );
As long as they are not freed memory buffer set in pStrPtr is valid
even if other code overwrote given item.
The second parameter in hb_itemGetStr() can specify expected CP
encoding, i.e.:
hStr = hb_itemGetStr( pItem, hb_setGetOSCP(), &pszText, &ulLen );
if( hStr )
{
...
hb_strfree( hStr );
}
extracts string in encoding set by Set( _SET_OSCODEPAGE, <cCPID> )
The second parameter in hb_itemGetStrU16() define endian encoding
and can be one of the following values:
#define HB_CDP_ENDIAN_NATIVE 0
#define HB_CDP_ENDIAN_LITTLE 1
#define HB_CDP_ENDIAN_BIG 2
defined in hbapicdp.h
+ added new C functions to copy part of strings to given buffers in
different encoding:
ULONG hb_itemCopyStr( PHB_ITEM pItem, void * cdp,
char * pStrBuffer, ULONG ulSize );
ULONG hb_itemCopyStrUTF8( PHB_ITEM pItem,
char * pStrBuffer, ULONG ulSize );
ULONG hb_itemCopyStrU16( PHB_ITEM pItem, int iEndian,
HB_WCHAR * pStrBuffer, ULONG ulSize );
hb_itemCopyStr*() functions works in similar way to hb_itemGetStr*()
ones but they copy the strings to given buffer and return the number
of characters (not bytes) copied to the buffer.
+ added new C functions to store given strings in different encoding in
HVM item:
PHB_ITEM hb_itemPutStrLen( PHB_ITEM pItem, void * cdp,
const char * pStr, ULONG ulLen );
PHB_ITEM hb_itemPutStrLenUTF8( PHB_ITEM pItem,
const char * pStr, ULONG ulLen );
PHB_ITEM hb_itemPutStrLenU16( PHB_ITEM pItem, int iEndian,
const HB_WCHAR * pStr, ULONG ulLen );
These functions accepts strings in different encoding, made some
conversions (if necessary and internal string representation in HVM is
different) and then store them as HVM string items.
+ added few extended API functions to operate on strings in different
encoding:
void * hb_parstr( int iParam, void * cdp,
const char ** pStrPtr, ULONG * pulLen );
void * hb_parstr_utf8( int iParam,
const char ** pStrPtr, ULONG * pulLen );
void * hb_parstr_u16( int iParam, int iEndian,
const HB_WCHAR ** pStrPtr, ULONG * pulLen );
void hb_retstr( void * cdp, const char * szText );
void hb_retstr_utf8( const char * szText );
void hb_retstr_u16( int iEndian, const HB_WCHAR * szText );
void hb_retstrlen( void * cdp, const char * szText, ULONG ulLen );
void hb_retstrlen_utf8( const char * szText, ULONG ulLen );
void hb_retstrlen_u16( int iEndian,
const HB_WCHAR * szText, ULONG ulLen );
int hb_storstr( void * cdp, const char * szText, int iParam );
int hb_storstr_utf8( const char * szText, int iParam );
int hb_storstr_u16( int iEndian,
const HB_WCHAR * szText, int iParam );
int hb_storstrlen( void * cdp,
const char * szText, ULONG ulLen, int iParam );
int hb_storstrlen_utf8( const char * szText, ULONG ulLen, int iParam );
int hb_storstrlen_u16( int iEndian,
const HB_WCHAR * szText, ULONG ulLen, int iParam );
They can be used instead of hb_parc*()/hb_retc*()/hb_storc*() ones and
allow to easy create code which operates on strings in different
encoding, i.e.:
HB_FUNC( MY_STRTOUTF8 )
{
const char * str;
ULONG len;
void * h;
h = hb_parstr_utf8( 1, &str, &len );
if( h )
{
hb_retclen( str, len );
hb_strfree( h );
}
}
The above functions allows to create code which operates on different
string encoding, i.e. UTF8, UCS2/UTF16, some CPs and such code is
independent from internal HVM string representation so we can use
internally Unicode or not and it will not effect existing code.
- source
+ src
* src/Makefile
* src/dynlib/mt/Makefile
* src/dynlib/Makefile
* INSTALL
* Makefile
* ChangeLog
* harbour.spec
* mpkg_tgz.sh
* Renamed 'source' dir to 'src' to move closer to other FOSS
projects. It's also easier to type, plus it has the side
effect that some cmdlines will be shorter in the
build process.