home *** CD-ROM | disk | FTP | other *** search
-
-
- /* DEMODLL - SQLWindows Demo Dynamic Link Library routines */
-
- #define NOCOMM
- #include <windows.h>
-
- #include <string.h>
- #include <memory.h>
- #include <dos.h>
-
- #include "swtype.h"
- #include "swin.h"
-
- #pragma hdrstop
-
- #define EXPORTAPI _far _pascal _export _loadds
-
- /* Function Prototypes */
-
- BYTE EXPORTAPI Multiplyx(int, int, LPINT);
- void EXPORTAPI ShowBox(void);
- void EXPORTAPI CopyField(HWND, HWND);
- int EXPORTAPI Multiply(int, int);
- void EXPORTAPI ShowString(LPSTR);
- BOOL EXPORTAPI ReturnBOOL(BOOL);
- char EXPORTAPI ReturnChar(char);
- BYTE EXPORTAPI ReturnBYTE(BYTE);
- int EXPORTAPI ReturnInt(int);
- WORD EXPORTAPI ReturnWORD(WORD);
- LONG EXPORTAPI ReturnLONG(LONG);
- DWORD EXPORTAPI ReturnDWORD(DWORD);
-
- #if 0 // No longer supported, the MS C 7.0 changed
-
- float EXPORTAPI ReturnFloat(float);
- double EXPORTAPI ReturnDouble(double);
-
- #else
- int EXPORTAPI ReturnFloat(float);
- int EXPORTAPI ReturnDouble(double);
-
- #endif
-
- HWND EXPORTAPI ReturnHWND(HWND);
- SQLHANDLENUMBER EXPORTAPI ReturnSQLHANDLENUMBER(SQLHANDLENUMBER);
- VOID EXPORTAPI ReturnVOID(void);
- BOOL EXPORTAPI ReturnLPSTR(LPSTR, LPSTR, LPSTR);
- BOOL EXPORTAPI ReturnLPBOOL(LPBOOL, BOOL, BOOL);
- BOOL EXPORTAPI ReturnLPCHAR(LPCHAR, char, char);
- BOOL EXPORTAPI ReturnLPBYTE(LPBYTE, BYTE, BYTE);
- BOOL EXPORTAPI ReturnLPINT(LPINT, int, int);
- void EXPORTAPI ReturnLPHWND(LPHWND, HWND);
- BOOL EXPORTAPI ReturnLPWORD(LPWORD, WORD, WORD);
- BOOL EXPORTAPI ReturnLPLONG(LPLONG, LONG, LONG);
- BOOL EXPORTAPI ReturnLPDWORD(LPDWORD, DWORD, DWORD);
- BOOL EXPORTAPI ReturnLPFLOAT(LPFLOAT, float, float);
- BOOL EXPORTAPI ReturnLPDOUBLE(LPDOUBLE, double, double);
- void EXPORTAPI SetMultilineText(HWND);
- BOOL EXPORTAPI ReturnMixed1(LPINT, int, int,
- LPLONG, long, long,
- LPINT, int, int,
- LPLONG, long, long);
- BOOL EXPORTAPI ReturnLPVOID(LPVOID, int, LPVOID, int, LPVOID, int);
- void EXPORTAPI SetLPVOID(LPVOID, LPSTR, int);
- void EXPORTAPI SortArray(HARRAY);
- void EXPORTAPI ShowArray(HARRAY);
- BOOL EXPORTAPI CombineStrings( HSTRING, HSTRING, LPHSTRING );
-
- VOID EXPORTAPI WEP ( int );
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- /*
- * FUNCTION: LibMain(HANDLE, WORD, WORD, LPSTR)
- *
- * PURPOSE: Is called by LibEntry. LibEntry is called by Windows when
- * the DLL is loaded. The LibEntry routine is provided in
- * the LIBENTRY.OBJ in the SDK Link Libraries disk. (The
- * source LIBENTRY.ASM is also provided.)
- *
- * LibEntry initializes the DLL's heap, if a HEAPSIZE value is
- * specified in the DLL's DEF file. Then LibEntry calls
- * LibMain. The LibMain function below satisfies that call.
- *
- * The LibMain function should perform additional initialization
- * tasks required by the DLL. In this example, no initialization
- * tasks are required. LibMain should return a value of 1 if
- * the initialization is successful.
- */
- int EXPORTAPI LibMain( HANDLE hModule,
- WORD wDataSeg,
- WORD cbHeapSize,
- LPSTR lpszCmdLine )
- {
- hModule;
- wDataSeg;
- cbHeapSize;
- lpszCmdLine;
- return 1;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- Windows DLL exit procedure.
- */
-
- VOID EXPORTAPI WEP (bSystemExit)
- int bSystemExit;
- {
- bSystemExit;
- }
-
-
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Multiplies parameter 1 and parameter 2 together and passes the result back
- in parameter 3.
- */
-
- BYTE EXPORTAPI Multiplyx(nNum1, nNum2, lpnResult)
- int nNum1;
- int nNum2;
- LPINT lpnResult;
- {
- *lpnResult = nNum1 * nNum2;
-
- return 0;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Calling a message box from a DLL.
- */
-
- void EXPORTAPI ShowBox()
- {
- MessageBox(GetActiveWindow(), "I'm in DEMODLL!", "ShowBox",
- MB_OK | MB_ICONASTERISK);
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Copies the first 99 chars from field hWndTo to field hWndFrom.
- */
-
- void EXPORTAPI CopyField( hWndTo, hWndFrom )
- HWND hWndTo;
- HWND hWndFrom;
- {
- char Buf[100];
-
- GetWindowText( hWndFrom, Buf, sizeof(Buf)-1 );
- SetWindowText( hWndTo, Buf );
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Returns parameter 1 multiplied by parameter 2.
- */
-
- int EXPORTAPI Multiply(a, b)
- int a, b;
- {
- return a * b;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Displays the string passed in a message box.
- */
-
- void EXPORTAPI ShowString(lpszString)
- LPSTR lpszString;
- {
- MessageBox(GetActiveWindow(), lpszString, "ShowString",
- MB_OK | MB_ICONASTERISK);
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- char SetMultilineTextString[] =
- "now is the time for all good men to come to the aid of their country\r\nnow is the time for all good men to come to the aid of their country";
-
- void EXPORTAPI SetMultilineText(hWnd)
- HWND hWnd;
- {
- SetWindowText(hWnd, SetMultilineTextString);
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Examples of returning each of the SQLWindows Data Types passed as parameters.
- */
-
- BOOL EXPORTAPI ReturnBOOL(varBOOL)
- BOOL varBOOL;
- {
- return varBOOL;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- char EXPORTAPI ReturnChar(varChar)
- char varChar;
- {
- return varChar;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BYTE EXPORTAPI ReturnBYTE(varBYTE)
- BYTE varBYTE;
- {
- return varBYTE;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- int EXPORTAPI ReturnInt(varInt)
- int varInt;
- {
- return varInt;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- WORD EXPORTAPI ReturnWORD(varWORD)
- WORD varWORD;
- {
- return varWORD;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- LONG EXPORTAPI ReturnLONG(varLONG)
- LONG varLONG;
- {
- return varLONG;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- DWORD EXPORTAPI ReturnDWORD(varDWORD)
- DWORD varDWORD;
- {
- return varDWORD;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- #if 0 // EMS=0 We need to handle the C compiler support for this differently
-
- float EXPORTAPI ReturnFloat(float varFloat)
- {
-
- return varFloat;
-
- }
-
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- double EXPORTAPI ReturnDouble(varDouble)
- double varDouble;
- {
- return varDouble;
- }
-
- #else
-
- int EXPORTAPI ReturnFloat(float varFloat)
- {
-
- return (int)varFloat;
-
- }
-
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- int EXPORTAPI ReturnDouble(varDouble)
- double varDouble;
- {
- return (int)varDouble;
- }
-
- #endif
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- HWND EXPORTAPI ReturnHWND(varHWND)
- HWND varHWND;
- {
- return varHWND;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- SQLHANDLENUMBER EXPORTAPI ReturnSQLHANDLENUMBER(varSQLHANDLENUMBER)
- SQLHANDLENUMBER varSQLHANDLENUMBER;
- {
- return varSQLHANDLENUMBER;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- VOID EXPORTAPI ReturnVOID()
- {
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- For each ReturnLPxxx function below, var1 must equal var3. The function
- returns var2 in var1.
- */
-
- BOOL EXPORTAPI ReturnLPSTR(varLPSTR, varLPSTR2, varLPSTR3)
- LPSTR varLPSTR;
- LPSTR varLPSTR2;
- LPSTR varLPSTR3;
- {
- BOOL bResult;
-
- bResult = !lstrcmp(varLPSTR, varLPSTR3);
- lstrcpy(varLPSTR, varLPSTR2);
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPBOOL(varLPBOOL, varBOOL, varBOOLTEST)
- LPBOOL varLPBOOL;
- BOOL varBOOL;
- BOOL varBOOLTEST;
- {
- BOOL bResult;
-
- bResult = *varLPBOOL == varBOOLTEST;
- *varLPBOOL = varBOOL;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPCHAR(varLPCHAR, varCHAR, varCHARTEST)
- LPCHAR varLPCHAR;
- char varCHAR;
- char varCHARTEST;
- {
- BOOL bResult;
-
- bResult = *varLPCHAR == varCHARTEST;
- *varLPCHAR = varCHAR;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPBYTE(varLPBYTE, varBYTE, varBYTETEST)
- LPBYTE varLPBYTE;
- BYTE varBYTE;
- BYTE varBYTETEST;
- {
- BOOL bResult;
-
- bResult = *varLPBYTE == varBYTETEST;
- *varLPBYTE = varBYTE;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPINT(varLPINT, varINT, varINTTEST)
- LPINT varLPINT;
- int varINT;
- int varINTTEST;
- {
- BOOL bResult;
-
- bResult = *varLPINT == varINTTEST;
- *varLPINT = varINT;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPWORD(varLPWORD, varWORD, varWORDTEST)
- LPWORD varLPWORD;
- WORD varWORD;
- WORD varWORDTEST;
- {
- BOOL bResult;
-
- bResult = *varLPWORD == varWORDTEST;
- *varLPWORD = varWORD;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPLONG(varLPLONG, varLONG, varLONGTEST)
- LPLONG varLPLONG;
- LONG varLONG;
- LONG varLONGTEST;
- {
- BOOL bResult;
-
- bResult = *varLPLONG == varLONGTEST;
- *varLPLONG = varLONG;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPDWORD(varLPDWORD, varDWORD, varDWORDTEST)
- LPDWORD varLPDWORD;
- DWORD varDWORD;
- DWORD varDWORDTEST;
- {
- BOOL bResult;
-
- bResult = *varLPDWORD == varDWORDTEST;
- *varLPDWORD = varDWORD;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPFLOAT(LPFLOAT varLPFLOAT, float varFLOAT,
- float varFLOATTEST)
- {
- BOOL bResult;
-
- bResult = *varLPFLOAT == varFLOATTEST;
- *varLPFLOAT = varFLOAT;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- BOOL EXPORTAPI ReturnLPDOUBLE(varLPDOUBLE, varDOUBLE, varDOUBLETEST)
- LPDOUBLE varLPDOUBLE;
- double varDOUBLE;
- double varDOUBLETEST;
- {
- BOOL bResult;
-
- bResult = *varLPDOUBLE == varDOUBLETEST;
- *varLPDOUBLE = varDOUBLE;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- void EXPORTAPI ReturnLPHWND(varLPHWND, varHWND)
- LPHWND varLPHWND;
- HWND varHWND;
- {
- *varLPHWND = varHWND;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- This function follows the pattern of the ReturnLPxxx functions above: For
- each set of 3 parameters the 1st must equal the 3rd; the 2nd is then passed
- back to the caller in the 1st parameter.
- */
-
- BOOL EXPORTAPI ReturnMixed1(
- LPINT varLPINT1, int varINT1, int varINT1TEST,
- LPLONG varLPLONG1, long varLONG1, long varLONG1TEST,
- LPINT varLPINT2, int varINT2, int varINT2TEST,
- LPLONG varLPLONG2, long varLONG2, long varLONG2TEST)
- {
- BOOL bResult;
-
- bResult = *varLPINT1 == varINT1TEST &&
- *varLPINT2 == varINT2TEST &&
- *varLPLONG1 == varLONG1TEST &&
- *varLPLONG2 == varLONG2TEST;
-
- *varLPINT1 = varINT1;
- *varLPINT2 = varINT2;
- *varLPLONG1 = varLONG1;
- *varLPLONG2 = varLONG2;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- var1 must equal var3, and return var2 in var1; but the difference in
- lengths are passed for everything.
- */
-
- BOOL EXPORTAPI ReturnLPVOID(varLPVOID1, nLen1,
- varLPVOID2, nLen2,
- varLPVOID3, nLen3)
- LPVOID varLPVOID1;
- int nLen1;
- LPVOID varLPVOID2;
- int nLen2;
- LPVOID varLPVOID3;
- int nLen3;
- {
- BOOL bResult;
- LPSTR lp1Save;
- LPSTR lp2End;
- LPSTR varLPVOID1LPSTR;
- LPSTR varLPVOID2LPSTR;
- LPSTR varLPVOID3LPSTR;
- int nLength;
-
- varLPVOID1LPSTR = varLPVOID1;
- varLPVOID2LPSTR = varLPVOID2;
- varLPVOID3LPSTR = varLPVOID3;
-
- lp1Save = varLPVOID1;
-
- nLength = min(nLen1, nLen3);
-
- bResult = TRUE;
- for (; nLength > 0; nLength--)
- if (*varLPVOID1LPSTR++ != *varLPVOID3LPSTR++)
- {
- bResult = FALSE;
- break;
- }
-
- for (lp2End = varLPVOID2LPSTR + nLen2; varLPVOID2LPSTR < lp2End; )
- *lp1Save++ = *varLPVOID2LPSTR++;
-
- return bResult;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Help routines for LPVOID calls. This sets the first arg to a string
- consisting of the second string followed by nulls and junk up to length given.
- */
-
- void EXPORTAPI SetLPVOID(varLPVOID, strStart, nLength)
- LPVOID varLPVOID;
- LPSTR strStart;
- int nLength;
- {
- int nStringLength;
- int n;
- LPSTR lpV;
- LPSTR varLPVOIDLPSTR;
- char VOIDSTR[512];
-
- lstrcpy( VOIDSTR, "\000\001\002\003\004\005\006\007\000\008\009\010\011\012\000\000\000\001\002\003\004\005\006\007" );
- lstrcat( VOIDSTR, "\000\008\009\010\011\012\000\000\000\001\002\003\004\005\006\007\000\008\009\010\011\012\000\000" );
- lstrcat( VOIDSTR, "\000\001\002\003\004\005\006\007\000\008\009\010\011\012\000\000\000\001\002\003\004\005\006\007" );
- lstrcat( VOIDSTR, "\000\008\009\010\011\012\000\000\000\001\002\003\004\005\006\007\000\008\009\010\011\012\000\000" );
-
- varLPVOIDLPSTR = varLPVOID;
-
- nStringLength = lstrlen(strStart);
- lstrcpy(varLPVOID, strStart); /* copy first part */
-
- for (varLPVOIDLPSTR += nStringLength, lpV = VOIDSTR, n = 0;
- n < nLength - nStringLength;
- n++)
- *varLPVOIDLPSTR++ = *lpV++;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- /*
- * Simple shuffle sort to sort array
- */
- void EXPORTAPI SortArray(HARRAY hArray)
- {
- BOOL bDirty;
- LONG lLowerLimit;
- LONG lUpperLimit;
- LONG lCurrent;
- INT nLow;
- INT nHigh;
- NUMBER numValueLow;
- NUMBER numValueHigh;
-
- SalQueryArrayBounds( hArray, &lLowerLimit, &lUpperLimit );
- bDirty = TRUE;
- while( bDirty )
- {
- bDirty = FALSE;
- for( lCurrent = lLowerLimit; lCurrent < lUpperLimit; lCurrent++ )
- {
- SWinArrayGetNumber( hArray, lCurrent, &numValueLow );
- SWinCvtNumberToInt( &numValueLow, &nLow );
- SWinArrayGetNumber( hArray, lCurrent + 1, &numValueHigh );
- SWinCvtNumberToInt( &numValueHigh, &nHigh );
-
- if( nLow > nHigh )
- {
- /* Switch the numbers */
-
- bDirty = TRUE;
- SWinArrayPutNumber( hArray, lCurrent, &numValueHigh );
- SWinArrayPutNumber( hArray, lCurrent + 1, &numValueLow );
- }
- }
- }
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- /*
- * Display some information about a string array
- */
- void EXPORTAPI ShowArray(HARRAY hArray)
- {
- LONG lLowerLimit;
- LONG lUpperLimit;
- LONG lCurrent;
- LONG lLength;
- LPSTR lpStrItem;
- char cBuff[128];
- BOOL bStopped;
- HSTRING hString;
- int nRet;
-
- /* Get the current array bounds */
-
- SalQueryArrayBounds( hArray, &lLowerLimit, &lUpperLimit );
-
- /* Display the array bounds */
-
- wsprintf(cBuff, "This array boundries are: %ld - %ld", lLowerLimit,
- lUpperLimit);
- SalMessageBox(cBuff, "ShowArray", MB_Ok);
-
- bStopped = FALSE;
- lCurrent = lLowerLimit;
-
- while (!bStopped)
- {
- /*
- Now loop through each of the elements, and display until the
- user says stop or we are at the end of the array.
- */
-
- if (lCurrent > lUpperLimit)
- break;
-
- /* Retrieve the element of the array */
-
- SWinArrayGetHString(hArray, lCurrent, &hString);
-
- /* Now that we have the hString, we need to get a pointer to it. */
-
- lpStrItem = SWinHStringLock(hString, &lLength);
-
- /* Now display it. */
-
- wsprintf(cBuff, "String Array element %ld: %.50s\n\rContinue?",
- lCurrent, lpStrItem);
- nRet = MessageBox(NULL, cBuff, "ShowArray", MB_YESNO | MB_ICONQUESTION);
-
- if (nRet == IDNO)
- bStopped = TRUE;
-
- /* Now unlock the string pointer */
-
- SWinHStringUnlock(hString);
-
- /*
- For this example, lets also change this string. You should not
- write directly into a string, since there may be other's pointing
- to it. So, you need to dereference this one and get a new one.
- That is what SWinInitLpHstringParam() is for.
- */
-
- SWinInitLPHSTRINGParam(&hString, 128L);
-
- /* Now hString contains a new string that I can write into. */
-
- lpStrItem = SWinHStringLock(hString, &lLength);
- lstrcpy(lpStrItem, "String replaced in ShowArray");
- SWinHStringUnlock(hString);
-
- /* Now we need to put this hString into the array. */
-
- SWinArrayPutHString(hArray, lCurrent, hString);
-
- /* Look at the next element */
-
- lCurrent++;
- }
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- /*
- * Concatenate two strings and put the resultant string into lphDestination
- */
- BOOL EXPORTAPI CombineStrings( hString1, hString2, lphDestination )
- HSTRING hString1;
- HSTRING hString2;
- LPHSTRING lphDestination;
- {
- LONG lLength;
- char huge *lpString1;
- char huge *lpString2;
- char huge *lpDestination;
- LONG lDummy;
-
-
- /* Get length of both source strings (without zero delimiter */
-
- lLength = SalStrGetBufferLength( hString1 ) - 1;
- lLength += SalStrGetBufferLength( hString2 ) - 1;
-
-
- /*
- * SWinInitLpHSTRINGParam() conditions the destination to receive the
- * destination string data. It must be called on a LPHSTRING data
- * type to condition the data. Not calling it would cause the
- * application to become corrupted.
- */
-
- if (!SWinInitLPHSTRINGParam(lphDestination, lLength + 1))
- return FALSE;
-
- lpDestination = SWinHStringLock(*lphDestination, &lDummy);
-
- lpString1 = SWinHStringLock(hString1, &lDummy);
- while( *lpDestination++ = *lpString1++ )
- ;
- SWinHStringUnlock(hString1);
-
- lpDestination--;
-
- lpString2 = SWinHStringLock(hString2, &lDummy);
- while( *lpDestination++ = *lpString2++ )
- ;
- SWinHStringUnlock(hString2);
-
- SWinHStringUnlock(*lphDestination);
-
- return TRUE;
- }
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-