#include <windows.h>
#include <commctrl.h>
// 回调函数,用于删除指定位置的指针
int CALLBACK DeletePtrAtIndex(void* p, void* pData) {
// pData 包含要删除的指针的索引
int nIndex = (int)(intptr_t)pData;
// 如果当前是指定的索引,则删除指针
if ((intptr_t)n == nIndex) {
delete p;
return 0; // 返回 0 以停止删除
}
return 1; // 返回 1 继续删除
}
int main() {
// 初始化 Common Controls 库
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icex);
// 创建动态指针数组
HDPA hDpa = DPA_Create(10);
if (hDpa == NULL) {
// 处理错误
return 1;
}
// 向数组中添加指针
int* pData1 = new int(42);
DPA_AppendPtr(hDpa, pData1);
// 向数组中添加另一个指针
int* pData2 = new int(99);
DPA_AppendPtr(hDpa, pData2);
// 要删除的指针的索引
int nIndexToDelete = 0;
// 使用 DPA_DeleteAllPtrs 删除指定位置的指针
DPA_DeleteAllPtrs(hDpa, DeletePtrAtIndex, (void*)(intptr_t)nIndexToDelete);
// 注意:此时 nIndexToDelete 指向的指针已经被删除,不要再使用它
// 清理资源
DPA_Destroy(hDpa);
return 0;
}
在这个例子中,DeletePtrAtIndex 函数被用作回调函数,当 DPA_DeleteAllPtrs 被调用时,它将被用于删除数组中指定位置的指针。注意,删除后,你不应再使用被删除的指针。
请注意,为了演示清晰,我在代码中省略了一些错误处理,实际应用中应该进行适当的错误检查和处理。
转载请注明出处:http://www.zyzy.cn/article/detail/27252/Win32 API/Dpa_dsa.h/DPA_DeletePtr