我正在尝试编写一个函数,该函数在顶级窗口上进行迭代,如果它们满足一组标准,则将它们放入列表中。目前,我可以通过将窗口添加到静态List<IntPtr> instances
变量中来使其工作,但我想改为将指针传递给EnumWindowsProc
'slParam
中的列表以避免此静态变量。
我想我必须用它fixed
来修复列表在内存中的位置,但我不确定如何做到这一点。我尝试将列表传递给我的回调函数:
unsafe
{
fixed (void* dp = &instances)
{
WinApi.EnumWindows(new WinApi.EnumWindowsProc(FindPPWindows), dp);
}
}
但我明白了
Cannot take the address of, get the size of, or declare a pointer to a managed type ('System.Collections.GenericList<IntPtr>')
我对 c# 很陌生,所以我真的不知道该怎么做 - 或者即使有可能,我也读过编组包含引用的托管类型是不可能的,但我只需要在内存中修复它并创建一个指针到它,然后将指针投射回去并使用它。如果有的话,我怎样才能完成这项工作?