在C#中,以下函数和结构体如何声明?,调用的时候 LPPROCESSENTRY32 lppe 个怎么调用?dwSize个知怎么确定阿,我用sizeof()取不到这个值很郁闷谢谢大家BOOL WINAPI Process32Next(
  HANDLE hSnapshot,
  LPPROCESSENTRY32 lppe
);typedef struct tagPROCESSENTRY32 {  DWORD dwSize;  DWORD cntUsage;  DWORD th32ProcessID;  ULONG_PTR th32DefaultHeapID;  DWORD th32ModuleID;  DWORD cntThreads;  DWORD th32ParentProcessID;  LONG pcPriClassBase;  DWORD dwFlags;  TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32, *PPROCESSENTRY32;

解决方案 »

  1.   

    LPPROCESSENTRY32是个结构体
    你首先应该封装这个结构体
    相应的类型也要转换,比如DWORD换成int32
      

  2.   

    问个更cheap的问题,你怎么知道LPPROCESSENTRY32结构体中包含那些内容?我在调用API时也遇到同样的问题
      

  3.   

    tagPROCESSENTRY32  这个不就是 LPPROCESSENTRY32 lppe 结构体的原型嘛在 Platform SDK 中查到的只是我不会声明和调用运行时不对,返回false
      

  4.   

    主要是声明一个结构体
    然后进行类型转换http://dev.csdn.net/article/32/32330.shtm
      

  5.   

    最好能给出完整代码,我是这样做的,但是什么都返回不了,  :( [DllImport("Kernel32.dll")]
    public static extern bool Process32Next( uint hSnapshot, ref PROCESSENTRY32 lppe ); public struct PROCESSENTRY32
    {
    public uint dwSize;
    public uint cntUsage;
    public uint th32ProcessID;
    public UIntPtr th32DefaultHeapID;
    public uint th32ModuleID;
    public uint cntThreads;
    public uint th32ParentProcessID;
    public long pcPriClassBase;
    public uint dwFlags;
    public string szExeFile;
    } struct dwFlags
    {
    public const uint TH32CS_SNAPHEAPLIST = 0x1;
    public const uint TH32CS_SNAPPROCESS = 0x2;
    public const uint TH32CS_SNAPTHREAD = 0x4;
    public const uint TH32CS_SNAPMODULE = 0x8;
    public const uint TH32CS_SNAPALL = ( TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE );
    public const uint TH32CS_INHERIT = 0x80000000;
    } PROCESSENTRY32 CurPE ;
    CurPE.dwSize = (uint)sizeof( UIntPtr ) + (uint)sizeof( uint )*7 
    + (uint)sizeof( long ) + 30 ; //30是szExeFile,是不是太小了? @_@ hSnapshot = CreateToolhelp32Snapshot( dwFlags.TH32CS_SNAPPROCESS, 0 );
    isOK = Process32Next( hSnapshot, ref CurPE );
      

  6.   

    http://dev.csdn.net/article/32/32330.shtm
      

  7.   

    你是不是要列举进程啊?
    我用C++时也是那么写的
    不过C#中简单多了,用Process就行了。
    当然API也会行的,我有空也试试,不就是改一下C++的代码嘛
    你上面定义时不妨设定大小:
    [MarshalAs(UnmanagedType.LPTStr,SizeConst=30)]public string szExeFile;
    这样可以用
    Marshal.SizeOf(CurPE.GetType())计算大小
    你或许也可以用ref StringBuilder szExeFile;
    IntPtr szExeFile;//这个你还需用Marshal.PtrToStringUni转换回来
      

  8.   

    我要做个分析内存中数据的模块(就像fpe那样的东西),c#中的Process类好像不够用阿
      

  9.   

    能具体说说吗?
    没做过FPE,你这块我很感兴趣,可以说说是如何分析内存数据的?
    说个思路,我也去写,哈哈那有意思,我写过好多调用API函数的程序,就没写过你这样分析内存的
      

  10.   

    要分析内存,你还得用HEAPENTRY32结构啊,一个也没搞好,你要忙了,哈哈,下周我有时间,先列举进程看看,如果行了我再分析一下进程,是这样吧,好了我弄出来一定告诉你,看你连思路也不和我说一下
      

  11.   

    我已经把列举进程的搞好了,请你提供分析内存中数据模块的相关资料,我帮你一起搞
    搞完后送你全部源代码。
    你的结构应该改为类:
    public class PROCESSENTRY32
    {
    public uint dwSize=(uint)Marshal.SizeOf(typeof(PROCESSENTRY32));
    public uint cntUsage=0;
    public uint th32ProcessID=0;
    public IntPtr th32DefaultHeapID=IntPtr.Zero;
    public uint th32ModuleID=0;
    public uint cntThreads=0;
    public uint th32ParentProcessID=0;
    public int pcPriClassBase;
    public uint dwFlags=0;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_PATH)]public string szExeFile;
    }