Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - jcfuller

#1
Bug Reports / WITH not Fixed
February 26, 2025, 01:03:36 PM
Kevin,
  We have an issue with your WITH fix.
James
Quote
Function CWindow_RegisterClass( szClassName As const char Ptr,hInstance As HINSTANCE,lpfnWndProc As WNDPROC) As ATOM
   Dim As ATOM wAtom
   Dim As WNDCLASSEXW wcexw
   static As Long nCount = 0

   static  As char m_wszClassName[256]
   If Len( szClassName) Then
      m_wszClassName = szClassName
   Else
      m_wszClassName = "BcxWindowClass"
      m_wszClassName = m_wszClassName & ":" + STR$(nCount)
   EndIf
   ' // Default handler
   If lpfnWndProc = NULL Then
      lpfnWndProc = (WNDPROC)&CWindow_WindowProc
   EndIf

   ' // Fill the WNDCLASSEXW structure
   With wcexw
      .cbSize        = SIZEOF(wcexw)
      .style         = CS_DBLCLKS BOR CS_HREDRAW BOR CS_VREDRAW
      .lpfnWndProc   = lpfnWndProc
      .cbClsExtra    = 0
      .cbWndExtra    = SIZEOF(HANDLE)
      .hInstance     = hInstance
      .hCursor       = LoadCursor(NULL, (LPCWSTR) IDC_ARROW)
      .hbrBackground = (HBRUSH) (COLOR_3DFACE + 1)
      .lpszMenuName  = NULL
      .lpszClassName = (LPCWSTR)&m_wszClassName
      .hIcon         = 0
      .hIconSm       = 0
      
   End With
   '' // Register the class
   wAtom = RegisterClassEx(&wcexw)
   '' // Increment the class counter
   IF wAtom THEN
      nCount = nCount + 1
   'Else
   '   zTrace(L"CRAP")
   EndIf
   '' // Return the atom
   
   Function = wAtom
End Function


Translation
Quote
// *************************************************
//            User's Subs and Functions
// *************************************************

ATOM CWindow_RegisterClass (const char* szClassName,HINSTANCE hInstance,WNDPROC lpfnWndProc)
{
  ATOM     wAtom= {0};
  WNDCLASSEXW  wcexw= {0};
  static long     nCount=0;
  static char     m_wszClassName[256];
  if((int)strlen(szClassName)){
      strcpy(m_wszClassName,szClassName);
    }
  else
    {
      strcpy(m_wszClassName,"BcxWindowClass");
      strcpy(m_wszClassName, join(3,m_wszClassName,":",str(nCount)));
    }
  if(lpfnWndProc==NULL ){
      lpfnWndProc=(WNDPROC)&CWindow_WindowProc;
    }
  wcexw.cbSize=sizeof();
  wcexw.style=CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
  wcexw.lpfnWndProc=lpfnWndProc;
  wcexw.cbClsExtra=0;
  wcexw.cbWndExtra=sizeof(HANDLE);
  wcexw.hInstance=hInstance;
  wcexw.hCursor=LoadCursor(NULL,(LPCWSTR)IDC_ARROW);
  wcexw.hbrBackground=(HBRUSH)(COLOR_3DFACE+1);
  wcexw.lpszMenuName=NULL;
  wcexw.lpszClassName=(LPCWSTR)&m_wszClassName;
  wcexw.hIcon=0;
  wcexw.hIconSm=0;
  wAtom=RegisterClassEx(&wcexw);
  if(wAtom ){
      nCount+=1;
    }
  return wAtom;
}

BCX:      .cbSize        = SIZEOF(wcexw)
Translated to                 wcexw.cbSize=sizeof();

James
#2
Compiler Related Discussions / clang++ #pragma's
January 28, 2025, 09:06:08 AM
Kevin,
I get:

clang++: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]

when compiling "c" source.

Shouldn't this

#pragma GCC diagnostic ignored "-Wdeprecated"

from the
// *************************************************
//                  GCC and CLANG
// *************************************************
section stop that?

-Wno-deprecated added to my compile line suppress the warning
James
#3
Compiler Related Discussions / Mingw dowload
January 26, 2025, 02:16:52 PM
Anyone using (familar with) this distro?
https://winlibs.com/

I have an older version
"winlibs personal build version gcc-12.1.0-mingw-w64msvcrt-10.0.0-r1"
but had not used it in ages. It seems to work just fine.
They certainly have versions for any matter of taste.

James


#4
Compiler Related Discussions / clang download
January 15, 2025, 06:11:51 AM
#5
Questions & Answers / /Tp /TP
August 28, 2024, 10:08:52 AM
Kevin,
  Now that Mike's InsertOptArg App doesn't work I am working on updates to my batch files for "c" source file as you do.
/Tp: Specifies a C++ source

I am wondering why you did not use
/TP: Specifies all source files are C++.

Would you not have issues with including "c" code files with optional arguments where #include is used instead of $INCLUDE. Maybe my memory is failing again but
$INCLUDE adds the source to the base file but #include just adds the #include "file.c"

James

#6
Bug Reports / $INCLUDE <filename> issues
August 23, 2024, 03:02:41 PM
Kevin,
NOT FIXED. Same issue
James
#7
Bug Reports / $Include issue
August 23, 2024, 12:39:34 PM
Kevin,
  I have not coded in a bit and missed this issue with BCX 8.1.2 and subsequently 8.1.3
No issue with earlier builds.

$Include <TClibinc.bi>
Error: Cannot Access File or File Not Found. <TCLIBINC.BI>

#8
Off-Topic Discussions / LibreChat
June 23, 2024, 08:20:33 AM
Kevin,
  I am not doing anything with AI but this sounded interesting?
Have you explored it?

James
#9
Bug Reports / Better Late Than never ???
May 28, 2024, 02:26:58 PM
Kevin,
  I haven't coded in quite awhile, but of course now that I want to, I find an issue that started with 7.9.1.

I know we discussed c++ "Range Based For" Loops but I don't remember when or how it went..??

I use a BCXPP.DLL to do the translation.

The test bas source (VEC4C.bas) attached

'==============================================================================
RbFor ( auto itx : s)
If itx = B$ Then
cout << "B$ match" << endl
A$ = itx.c_str()
break
End If
cout << " " << itx << endl
RbNext

'------------------------------------------------------------------------------
Translated with 7.9.0
'------------------------------------------------------------------------------

    cout << "range-based for loop" << endl;
    for  (auto itx : s) {
        if(itx == B ) {
            cout << "B$ match" << endl;
            strcpy(A, itx.c_str());
            break;
        }
        cout << " " << itx << endl;
    };

'==============================================================================
The bas code in the BCXPP.DLL:
'==============================================================================

'c++11 range-based for loops
If LeftStr(Src$,"rbfor",1) Then
iReplace "rbfor" With "! for" In Src$
Src$ = Src$ & "{"
Function = 1
EndIf

If LeftStr(Src$,"rbnext",1) Then
Src$ = "}"
Function = 1
EndIf

'------------------------------------------------------------------------------
translated to:
    if(LeftStr(Src, "rbfor", 1)) {
        strcpy(Src, iReplace(Src, "rbfor", "! for"));
        strcat(Src, "{");
        return 1;
    }
    if(LeftStr(Src, "rbnext", 1)) {
        strcpy(Src, "}");
        return 1;
    }
'==============================================================================

Bcx Hangs on the
RbFor ( auto itx : s)
Line

James


#10
Bug Reports / SetDialogScale(hWnd, 0); added
February 19, 2024, 10:51:13 AM
Kevin,
  SetDialogScale(hWnd, 0);
  is added to the cpp translation when a
  case WM_INITDIALOG is added to the bcx source
  Comment the WM_INITDIALOG and it is not added
  This is an rc dialog app. you will need to compile and include the res in the construction.
James


$CPP
$CPPHDR
$NOMAIN
$ONEXIT "ASTYLE.EXE -pn $FILE$.CPP"
$ONEXIT "VSCPP.BAT $FILE$ -m64 con"

$CCODE CONST
  using namespace std;
$CCODE

CONST MANIFEST                24
CONST IDD_DLG1                1000
CONST IDC_BTN1                1003
CONST IDC_BTN2                1004
CONST IDC_BTN3                1005
CONST IDC_STC1                1001
CONST IDC_STC2                1002
CONST IDR_XPMANIFEST1         1
CONST CTLHNDL(id) = GetDlgItem(hWnd,id)
$PP
'$USE USE_IMATCH USE_bc9StrParseCount USE_SetColor USE_CLIPBOARD
'$Include <BCppXLib.bi>
'==============================================================================
Function WinMain()
    Local As HWND hDlg
    Local As MSG Msg
Local As HFONT hFont
Dim As HWND hCtl
    hDlg = CreateDialogParam(hInst,MAKEINTRESOURCE(IDD_DLG1),0,(DLGPROC)DlgProc,0)
    While GetMessage(&Msg,NULL, 0, 0)
        If (IsDialogMessage(hDlg, &Msg) = 0) Then
            TranslateMessage(&Msg)
            DispatchMessage(&Msg)
        End If
    Wend
   
    Function = Msg.wParam   
End Function
'==============================================================================
Begin Dialog As DlgProc


    Select Case (CBMSG)
    'This is added automagically by BCX
    'case WM_CLOSE
        '    DestroyWindow(CBHWND)
    case WM_INITDIALOG
    ' BCX_SET_FONT(CTLHNDL(IDC_STC2),"Tahoma",11)
    case WM_DESTROY
            PostQuitMessage(0)
            Function = 0   
    case WM_COMMAND
            Select Case(CBCTL)
            case IDC_BTN3
                    PostMessage(CBHWND,WM_CLOSE,0,0)
                    CloseDialog
            End Select
           
    End Select
End Dialog
$PP

'==============================================================================
cpp Source

// *************************************************
//      Made with BCX BASIC To C/C++ Translator
//            Version 8.0.8 (12/27/2023)
// *************************************************
//    Translated for compiling with a C++ Compiler
// *************************************************

#ifndef __cplusplus
#error A C++ compiler is required
#endif

#ifdef _MSC_VER
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#endif

#if defined(__cplusplus)
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
typedef std::string stdstr;
#endif


#include <windows.h>    // WinApi
#include <windowsx.h>   // WinApi
#include <commctrl.h>   // WinApi
#include <commdlg.h>    // WinApi
#include <direct.h>     // WinApi
#include <mmsystem.h>   // WinApi
#include <oaidl.h>      // WinApi
#include <objbase.h>    // WinApi
#include <ocidl.h>      // WinApi
#include <ole2.h>       // WinApi
#include <oleauto.h>    // WinApi
#include <olectl.h>     // WinApi
#include <richedit.h>   // WinApi
#include <shellapi.h>   // WinApi
#include <shlobj.h>     // WinApi
#include <urlmon.h>     // WinApi
#include <wchar.h>      // WinApi
#include <wctype.h>     // WinApi
#include <tchar.h>      // WinApi
#include <unknwn.h>     // WinApi
#include <wingdi.h>     // WinApi
#include <wininet.h>    // WinApi
#include <winsock.h>    // WinApi
#include <winuser.h>    // WinApi
#include <stdbool.h>    // ISO StdLib
#include <ctype.h>      // ISO StdLib
#include <math.h>       // ISO StdLib
#include <setjmp.h>     // ISO StdLib
#include <stdarg.h>     // ISO StdLib
#include <stddef.h>     // ISO StdLib
#include <stdio.h>      // ISO StdLib
#include <stdlib.h>     // ISO StdLib
#include <string.h>     // ISO StdLib
#include <time.h>       // ISO StdLib
#include <process.h>    // ISO StdLib
#include <inttypes.h>   // ISO StdLib
#include <fcntl.h>      // POSIX
#include <io.h>         // WinNT POSIX subset
#include <conio.h>      // Primitive i/o


// *************************************************
//            System Defined Macros
// *************************************************

#define BCXSTRSIZE 2048

// *************************************************
//             User Defined Macros
// *************************************************

using namespace std;
#define MANIFEST 24
#define IDD_DLG1 1000
#define IDC_BTN1 1003
#define IDC_BTN2 1004
#define IDC_BTN3 1005
#define IDC_STC1 1001
#define IDC_STC2 1002
#define IDR_XPMANIFEST1 1
#define CTLHNDL(id) GetDlgItem(hWnd,id)

// *************************************************
//                  Compiler Macros
// *************************************************

#if defined(__cplusplus)
#define overloaded
#define C_EXPORT EXTERN_C __declspec(dllexport)
#define C_IMPORT EXTERN_C __declspec(dllimport)
#else
#define C_EXPORT __declspec(dllexport)
#define C_IMPORT __declspec(dllimport)
#endif

// *************************************************
//                   Microsoft VC++
// *************************************************

#ifndef DECLSPEC_UUID
#if(_MSC_VER >= 1100) && defined(__cplusplus)
#define DECLSPEC_UUID(x)  __declspec(uuid(x))
#else
#define DECLSPEC_UUID(x)
#endif
#endif
#if (_MSC_VER >= 1900)            // earlier versions untested
#include <intrin.h>
#ifndef _rdtsc
#define _rdtsc __rdtsc   // MSVC uses 2 underscores
#endif
#pragma warning(disable: 4018) // signed/unsigned mismatch warnings
#pragma warning(disable: 4100) // unreferenced argument warnings
#pragma warning(disable: 4244) // conversion from type1 to type2 warnings
#pragma warning(disable: 4267) // conversion from type1 to type2 warnings
#pragma warning(disable: 4305) // truncation from double to float warnings
#pragma warning(disable: 4800) // forcing value to bool warnings
#pragma warning(disable: 4838) // conversion from type1 to type2 warnings
#endif

// *************************************************
//                  GCC and CLANG
// *************************************************

#if defined(__GNUC__) || defined(__clang__)
#ifndef __BCPLUSPLUS__
#include <x86intrin.h>
#endif
#pragma GCC diagnostic ignored "-Wwrite-strings"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma GCC diagnostic ignored "-Wdangling-else"
#pragma GCC diagnostic ignored "-Wdeprecated"
#endif

// *************************************************
//                  Embarcadero C++
// *************************************************

#if defined(__BCPLUSPLUS__)
#if defined (_clang__)
#include <mmintrin.h>
#endif
#define _kbhit kbhit
#ifndef _rdtsc
#define _rdtsc __rdtsc  // Uses 2 underscores
#endif
#endif


// *************************************************
// Instruct Linker to Search Object/Import Libraries
// *************************************************

#if !defined(__GNUC__) && !defined(__TINYC__)
#if !(defined(__BCPLUSPLUS__) && defined(_WIN64))
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"gdi32.lib")
#pragma comment(lib,"comctl32.lib")
#pragma comment(lib,"advapi32.lib")
#pragma comment(lib,"winspool.lib")
#pragma comment(lib,"shell32.lib")
#pragma comment(lib,"msimg32.lib")
#pragma comment(lib,"ole32.lib")
#pragma comment(lib,"oleaut32.lib")
#pragma comment(lib,"uuid.lib")
#pragma comment(lib,"odbc32.lib")
#pragma comment(lib,"odbccp32.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"comdlg32.lib")
#pragma comment(lib,"imagehlp.lib")
#pragma comment(lib,"version.lib")
#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"urlmon.lib")
#endif
#endif


// *************************************************
//               Standard Macros
// *************************************************


// *************************************************
//               User's Prototypes
// *************************************************

int     WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int);
INT_PTR CALLBACK DlgProc (HWND, UINT, WPARAM, LPARAM);

// *************************************************
//            User's Global Initialized Arrays
// *************************************************


// *************************************************
//                 Runtime Functions
// *************************************************

// *************************************************
//            User's Subs and Functions
// *************************************************

int WINAPI WinMain (HINSTANCE  hInst, HINSTANCE  hPrev, LPSTR  CmdLine, int CmdShow)
{
    HWND     hDlg = {0};
    MSG      Msg = {0};
    HFONT    hFont = {0};
    HWND     hCtl = {0};
    hDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_DLG1), 0, (DLGPROC)DlgProc, 0);
    while(GetMessage(&Msg, NULL, 0, 0)) {
        if((IsDialogMessage(hDlg, &Msg) == 0)) {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
    }
    return Msg.wParam;
}


INT_PTR CALLBACK DlgProc (HWND hWnd, UINT Msg, WPARAM  wParam, LPARAM  lParam)
{
    if((Msg) == WM_INITDIALOG ) {
        SetDialogScale(hWnd, 0);
        goto L1001;
    }
    if((Msg) == WM_DESTROY ) {
        PostQuitMessage(0);
        return 0;
    }
    if((Msg) == WM_COMMAND ) {
        if((LOWORD(wParam)) == IDC_BTN3 ) {
            PostMessage(hWnd, WM_CLOSE, 0, 0);
            DestroyWindow(hWnd);
        }
    }
L1001:
    ;
    if(Msg == WM_CLOSE) DestroyWindow(hWnd);
    return EXIT_SUCCESS;
}





James

#11
Bug Reports / BCX 8.0.7 & unicode
December 11, 2023, 07:58:56 AM
Kevin,
  Issue with 8.0.7 translation

James

BCX 8.0.6 works as it always has

_TCHAR *left (LPCTSTR szSrc, int length)
{
    size_t tmplen = _tcslen(szSrc);
    if (length < 1) return BCX_TmpStr(1);
    if (length < (int)tmplen) tmplen = length;
    _TCHAR *strtmp = BCX_TmpStr(tmplen);
    return (_TCHAR*)wmemcpy(strtmp, szSrc, tmplen);
}

BCX 8.0.7

_TCHAR *left (LPCTSTR szSrc, int length)
{
    size_t tmplen = _tcslen(szSrc);
    if (length < 1) return BCX_TmpStr(1);
    if (length < (int)tmplen) tmplen = length;
    _TCHAR *strtmp = BCX_TmpStr(tmplen);
    return (_TCHAR*)wmemcpy((void*)strtmp, (void*)szSrc, tmplen);
}

Str_1211.cpp(229): error C2664: 'wchar_t *wmemcpy(wchar_t *,const wchar_t *,size_t)': cannot convert argument 1 from 'void *' to 'wchar_t *'
Str_1211.cpp(229): note: Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\wchar.h(229): note: see declaration of 'wmemcpy'
Str_1211.cpp(229): note: while trying to match the argument list '(void *, void *, size_t)'
#12
I did a search but none of the answers worked or I am .......

I have a usb drive hanging off my router.
It is mapped on this computer as R
I want to copy folders and their contents from this computer to the folder R:\magic on the usb drive KEEPING THE TIME DATE STAMP on files and FOLDERS.
The folders to be copied are ALL on the root of C:
I know from previous experience XCOPY does not work for the FOLDERS.
I tried several robocopy examples to no avail.
I was going to resort to 7Zip but I believe it has trouble with mapped drives

robocopy "c:\aplib111" "R:\Magic"
I did try with the UNC
robocopy "c:\aplib111" \\READYSHARE\T_Drive\Magic"

neither of these will create the aplib111 folder

James
#13
Compiler Related Discussions / winlibs.com
May 08, 2023, 04:37:20 AM
I just ran into this:

https://winlibs.com/

Over on:

https://cplusplus.com/forum/windows/285439/

Any one ever used it?

James

#14
Tips & Tricks / Bounded Flexible Arrays in C
February 12, 2023, 04:01:27 AM

I have not read this yet but it did sound interesting:
https://people.kernel.org/kees/bounded-flexible-arrays-in-c

James
#15
BCX Application Dev Platform / BcxAdp Update 11/14/2022
November 14, 2022, 06:46:19 AM
BcxAdp was updated on November 14, 2022.

https://sourceforge.net/projects/bcxadp/files/BcxAdp/BcxAdp.zip/download

This corrects the crashing.
If you are overwriting a current BcxAdp folder you should make a backup copy of your BcEdit.ini before unzipping
or
unzip to a temp folder and use WinMerge (https://winmerge.org) to update your current BcxAdp folder. WinMerge is one of my most used utilities.

James




#16
Questions & Answers / I capitulate
July 18, 2022, 03:39:56 PM
Kevin,
Take a deep breath :)
I capitulate.

On further reflection (allowed or not) reserved words should not be used as user defined entities (Built-in functions, commands, directives, etc).
Here is my revised sql3 wrapper class Declaration:.


Class cxSql3
public:
Dim Constructor cxSql3()
Dim Destructor ~cxSql3()
Dim Function OpenDb(s As stdstr) As _bool
Dim Function QueryDb(s As stdstr) As Integer
Dim Sub CloseDb()
Dim Function Exec(s As stdstr) As Integer
Dim Function GetItem(Row As Integer,Col As Integer) As stdstr
Dim Sub AddColName(s AS stdstr)
Dim Function GetColName(idx As Integer) As stdstr
Dim Sub AddRow(xsv As vector<stdstr>)
Dim PROPSET RowCount(i As Integer)
Dim PROPGET RowCount() As Integer
Dim PROPSET ColCount(i As Integer)
Dim PROPGET ColCount() As Integer
Dim PROPGET Db() As sqlite3 Ptr
Dim PROPSET Db(sp As sqlite3 Ptr)
Dim PROPGET ErrMsg() As stdstr
Dim Raw As sqlite3 Ptr m_Db
Dim Raw As stdstr m_sql,m_ErrMsg
Dim Raw As Integer m_RowCount,m_ColCount
Dim Raw As vector<stdstr> m_ColData
Dim Raw As vector<vector<stdstr>> m_RowData
Dim Raw As vector<stdstr> m_ColNames
End Class



James
#17
Questions & Answers / GET as a reserved word
July 12, 2022, 08:14:08 AM
Kevin,
Quote
  added a note that "VBA's GET reserved word can be used as an alias to BCX's GET$ statement."

bc 7.9.1 translates this class method declaration

Dim Function Get(Row As Integer,Col As Integer) As stdstr


To

stdstr   ~get(int,int);
[/cdoe]

bc7.9.0 translates to
[code]
stdstr   Get(int,int);



bc7.9.1 correctly translate the definition


Function cxSql3::Get(Row As Integer,Col As Integer) As stdstr
    If (Row > -1 AND Row < m_RowCount) AND (Col > -1 AND Col < m_ColCount) Then
        Function = m_RowData[Row][Col]
    End If
    Function = ""
End Function


to


stdstr cxSql3::Get (int Row,int Col)
{
  if((Row>-1&&Row<m_RowCount)&&(Col>-1&&Col<m_ColCount)){
      return m_RowData[Row][Col];
  }

  return NUL;
}



Does this mean with the addition GET as a reserved word I have to change all my source??

James


#18
Bug Reports / $PP issue with 7.9.0
June 18, 2022, 12:29:06 PM
Kevin,
  Issue with BCX Preprocessor $PP
My dll has worked with all previous versions.
This is my export
FUNCTION ProcessLine( Src$) AS LONG EXPORT
Maybe the $  ??

James
===========================
BCXPP.DLL Successfully Loaded
Error!

CW_CC_Button.bas

'FUNCTION ProcessLine' missing in BCX Preprocessor DLL! at line 25 in Module: CW_CC_Button.bas

Original line

$PP
=========================
#19
Bug Reports / METHOD PROPERTY issues
April 14, 2022, 07:19:50 AM
Kevin,
  METHOD and PROPERTY need attention
Try replacing FUNCTION with METHOD in c++ exmple C20.bas

James
#20
Wish List / An OLD one I missed
April 13, 2022, 05:22:34 PM
Kevin,
  I thought you had eliminated both Pelles and LCC #if's from c++ code but we missed one.
Would it be possible to clean this up?
Thank you
James
from C03 c++ example

// *************************************************
// Instruct Linker to Search Object/Import Libraries
// *************************************************
#if !defined(__GNUC__)
#if !(defined(__BCPLUSPLUS__) && defined(_WIN64))
#if !defined( __LCC__ )
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"gdi32.lib")
#pragma comment(lib,"comctl32.lib")
#pragma comment(lib,"advapi32.lib")
#pragma comment(lib,"winspool.lib")
#pragma comment(lib,"shell32.lib")
#pragma comment(lib,"ole32.lib")
#pragma comment(lib,"oleaut32.lib")
#pragma comment(lib,"uuid.lib")
#pragma comment(lib,"odbc32.lib")
#pragma comment(lib,"odbccp32.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"comdlg32.lib")
#pragma comment(lib,"imagehlp.lib")
#pragma comment(lib,"version.lib")
#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"urlmon.lib")
#else
#pragma lib <winspool.lib>
#pragma lib <shell32.lib>
#pragma lib <ole32.lib>
#pragma lib <oleaut32.lib>
#pragma lib <uuid.lib>
#pragma lib <odbc32.lib>
#pragma lib <odbccp32.lib>
#pragma lib <winmm.lib>
#pragma lib <imagehlp.lib>
#pragma lib <version.lib>
#pragma lib <wininet.lib>
#pragma lib <urlmon.lib>
#endif
#endif
#endif