qualcuno riesce a provare questo codice???

codice:
#define STRICT

#include <windows.h>
#include <commctrl.h>
#include <sql.h>
#include <sqlext.h>
#include "resource.h"

#define WIN32_LEAN_AND_MEAN
#define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54)
#define LVS_EX_FULLROWSELECT 32

LVCOLUMN LvCol;
LVITEM LvItem;

void dtGrid(HWND hwnd, int mItem, int *swi, int *idGrid, int redraw) {
    SQLWCHAR *szData=new SQLWCHAR[256];
    SQLINTEGER cbData;
    extern SQLHSTMT stmtR;
    RETCODE rc, rc1;
	//InitCommonControls();                      //in main a livello globale
    
    HWND hGrid=GetDlgItem(hwnd,*idGrid);
    ListView_SetBkColor(hGrid,RGB(228,228,228));
    SendMessage(hGrid,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT);

    memset(&LvCol,0,sizeof(LvCol));
    LvCol.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM;
    LvCol.cchTextMax=40;
    LvCol.cx = 0x40;   
    if(redraw==0) {
	extern SQLHDBC dbc; SQLHSTMT stmtHc;
        SQLAllocHandle(SQL_HANDLE_STMT,dbc,&stmtHc);
	SQLBindParameter(stmtHc, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &mItem, 0, NULL);
	SQLBindParameter(stmtHc, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, static_cast<void*>(swi), 0, NULL);
	if(SQLExecDirect(stmtHc, (SQLWCHAR*)L"CALL dba.sp_LvHeader( ?, ? )", SQL_NTS)==SQL_SUCCESS) {
	   SQLINTEGER cbalign,cbwidth; 
           SQLWCHAR sztxt[40];

            SQLBindCol(stmtHc, 1, SQL_C_WCHAR, &sztxt, sizeof(sztxt), NULL); 
            SQLBindCol(stmtHc, 2, SQL_INTEGER, &cbalign, 0, NULL);
            SQLBindCol(stmtHc, 3, SQL_INTEGER, &cbwidth, 0, NULL);
            rc=SQLFetch(stmtHc);
            int *iHc=new int(0);
            while(rc==SQL_SUCCESS || rc==SQL_SUCCESS_WITH_INFO) {
                LvCol.fmt=((cbalign==0) ? LVCFMT_LEFT :  LVCFMT_RIGHT);
                LvCol.pszText=sztxt;

                /*
                SendMessage(hGrid,LVM_INSERTCOLUMN,*iHc,(LPARAM)&LvCol);
                SendMessage(hGrid,LVM_SETCOLUMN,*iHc,(LPARAM)&LvCol);
                SendMessage(hGrid,LVM_SETCOLUMNWIDTH,*iHc,MAKELPARAM((int)cbwidth,0));
                */

                ListView_InsertColumn(hGrid,*iHc,&LvCol);
                ListView_SetColumn(hGrid,*iHc,&LvCol);
                ListView_SetColumnWidth(hGrid,*iHc,cbwidth);

                *iHc+=1;
                rc=SQLFetch(stmtHc);
            }
            delete iHc;
        }
	SQLFreeHandle(SQL_HANDLE_STMT,stmtHc);
     } else {
        ListView_DeleteAllItems(hGrid);
    }

    memset(&LvItem,0,sizeof(LvItem));
    LvItem.mask=LVIF_TEXT;   			
    LvItem.cchTextMax=256; 				
    int *iItem=new int(0);
    int *isubItem=new int(0);

    rc=SQLFetch(stmtR);
    while(rc==SQL_SUCCESS || rc==SQL_SUCCESS_WITH_INFO) {
	int *i=new int(1);
	while((rc1=SQLGetData(stmtR,*i,SQL_C_WCHAR,szData,256,&cbData)) == SQL_SUCCESS) {
    	    if(cbData==SQL_NULL_DATA) {
	      *szData=(WCHAR)NULL;
	    }
	    if(*isubItem==0) {
	      LvItem.iItem=*iItem;
              LvItem.iSubItem=*isubItem;
		//SendMessage(hGrid,LVM_INSERTITEM,(WPARAM)0,(LPARAM)&LvItem);
	      ListView_InsertItem(hGrid,&LvItem);
	     }
      	    LvItem.iSubItem=*isubItem;
            LvItem.pszText=szData; 
		//SendMessage(hGrid,LVM_SETITEM,(WPARAM)0,(LPARAM)&LvItem);
	    ListView_SetItem(hGrid,&LvItem);
	    *i+=1;
	    *isubItem+=1;
	}
	*iItem+=1;
	*isubItem=0;
	rc=SQLFetch(stmtR);
        delete i;
    }
    delete iItem;
    delete isubItem;
    delete [] szData;

    SQLCloseCursor(stmtR);
    SQLFreeHandle(SQL_HANDLE_STMT,stmtR);

    ListView_SetItemState(hGrid,0,LVIS_SELECTED,LVIS_SELECTED);
    ListView_SetItemState(hGrid,0,LVIS_FOCUSED,LVIS_FOCUSED);	
    return;
}