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