SQL バックエンドを備えた C++ アプリケーションがあり、必要に応じてリスト コントロール行に SetItemData() を使用して、取得した列 (データベース内の整数、主キー bigint) の行 ID を格納しています。ID を照会する必要がある場合は、GetItemData() で取得します。
この 1 つのシナリオでは、GetItemData() が格納された ID ではなく、ランダムな 7 桁の数字を返すという奇妙な問題が発生しています。行を追加するときは、次のコードを使用します。
CListCtrl& lc = GetListCtrl();
for (int i = 0; i < vInsertItems.size(); i++) {
int j = lc.InsertItem(i,i.strName);
DWORD dwdRowID = (DWORD)cammms,nRowID;
lc.SetItemData(j,dwdRowID);
}
値を取得して確認するには、次のようにします (nCurrentlySelectedIndex が正しいと判断した場合)。
CListCtrl& lc = GetListCtrl();
int msgID = lc.GetItemData(nCurrentlySelectedIndex);
CString debugInt; debugInt.Format(_T("debugInt = %d"),msgID);
AfxMessageBox(debugInt);
奇妙なのは、最初のバッチの直後に 2 番目のコード バッチを実行しても、すべて問題ないということです。しかし、別の関数で実行すると、msgID はランダムな 7 桁のセットに設定され、毎回異なります。
誰がこれを引き起こしているのか考えていますか?