猫を参考にしています。

HWND hList;//リストビューのハンドルを入れてあるグローバル変数

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
  static LV_FINDINFO lvf ;
  static int item1, item2 ;
  static char buf1[512] , buf2[512] ;
  lvf.flags = LVFI_PARAM ;  lvf.lParam = lParam1 ;

  item1 = ListView_FindItem(hList, -1, &lvf) ;
  lvf.lParam = lParam2 ;
  item2 = ListView_FindItem(hList, -1, &lvf) ;
  ListView_GetItemText(hList, item1, (int)lParamSort, buf1, sizeof(buf2));
  ListView_GetItemText(hList, item2, (int)lParamSort, buf2, sizeof(buf2));
  return strcmp(buf1, buf2);
}

呼び出すのはこうやってます。

  NMLISTVIEW pNMlist = (NMLISTVIEW *)lParam ;
  ListView_SortItems(hList, CompareFunc, pNMlist->iSubItem);

リストビューのウインドウハンドル、hListは確かに存在します。
実験的に、ListView_SortItems()の前にIsWindow()をやって確かめました。