Is D's GC.calloc and C's memset played the same role?

FrankLike via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Dec 23 07:37:12 PST 2014


Today,I meet a question:get all processes names.

----------C++ CODE-----------------
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>    //C standard I/O
#include <tlhelp32.h>

int _tmain(int argc, _TCHAR* argv[])
{
     HANDLE 
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

     if(hProcessSnap==INVALID_HANDLE_VALUE)
     {
         _tprintf(_T("CreateToolhelp32Snapshot error!\n"));
         return -1;
     }

     PROCESSENTRY32 pe32;
     pe32.dwSize = sizeof(PROCESSENTRY32);

     BOOL bMore=Process32First(hProcessSnap,&pe32);
     int i=0;

     _tprintf(_T("PID\t thread nums \t name \n"));

     while(bMore)
     {
         bMore=Process32Next(hProcessSnap,&pe32);
         _tprintf(_T("%u\t"),pe32.th32ProcessID);
         _tprintf(_T("%u\t"),pe32.cntThreads);
         _tprintf(_T("%s\n"),pe32.szExeFile);

         i++;
     }

     CloseHandle(hProcessSnap);
     _tprintf(_T("Count:%d\n"),i);

     return 0;
}
----------------D code--------------------------
import std.stdio;
import std.string;
import core.sys.windows.windows;
import core.memory;
import win32.tlhelp32;

void main()
{
  	
     HANDLE 
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

     if(hProcessSnap is null)
     {
         writeln("CreateToolhelp32Snapshot error!\n");
         return ;
     }

     PROCESSENTRY32* pe32 = 
cast(PROCESSENTRY32*)GC.calloc(PROCESSENTRY32.sizeof);

      pe32.dwSize = PROCESSENTRY32.sizeof;

     bool bMore=cast(bool)Process32First(hProcessSnap,pe32);
     int i=0;

     writeln("PID\t thread nums\t name \n");

     while(bMore)
     {
         bMore=cast(bool)Process32Next(hProcessSnap,pe32);
        string s = cast(string)pe32.szExeFile;
        auto a = s.indexOf('\0');
        if(a >=0)
         
writeln("\t",pe32.th32ProcessID,"\t",pe32.cntThreads,"\t",s[0..a]);
         i++;
     }

     CloseHandle(hProcessSnap);
     writeln(format("count:%d",i));

     return ;
}
-----------------------end----------------------
you will find the different:
  D: PROCESSENTRY32* pe32 = 
cast(PROCESSENTRY32*)GC.calloc(PROCESSENTRY32.sizeof);

C++:PROCESSENTRY32 pe32;

GC.calloc means: memset ?!


More information about the Digitalmars-d-learn mailing list