VOID
GetProcessNameByID(
DWORD dwProcessID,
WCHAR szProcessName[]
)
{
HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize = sizeof(pe);
BOOL bMore = ::Process32First(hSnapshot,&pe);
while(bMore){
if(pe.th32ProcessID == dwProcessID){
StrCpy(szProcessName, pe.szExeFile);
break;
}
else{
bMore = ::Process32Next(hSnapshot,&pe);
}
}
}
调用代码:
CString szProcessName;
GetProcessNameByID(processid, szProcessName.GetBuffer()); 这样是正常的,但是我把函数变换一下,第二个参数变成CString,
StrCpy(szProcessName, pe.szExeFile)这行也换成StrCpy(szProcessName.GetBuffer(), pe.szExeFile);
调用的时候是GetProcessNameByID(processid, szProcessName);
结果函数执行完后报错,不明所以,求解。
GetProcessNameByID(
DWORD dwProcessID,
WCHAR szProcessName[]
)
{
HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize = sizeof(pe);
BOOL bMore = ::Process32First(hSnapshot,&pe);
while(bMore){
if(pe.th32ProcessID == dwProcessID){
StrCpy(szProcessName, pe.szExeFile);
break;
}
else{
bMore = ::Process32Next(hSnapshot,&pe);
}
}
}
调用代码:
CString szProcessName;
GetProcessNameByID(processid, szProcessName.GetBuffer()); 这样是正常的,但是我把函数变换一下,第二个参数变成CString,
StrCpy(szProcessName, pe.szExeFile)这行也换成StrCpy(szProcessName.GetBuffer(), pe.szExeFile);
调用的时候是GetProcessNameByID(processid, szProcessName);
结果函数执行完后报错,不明所以,求解。
解决方案 »
- split分割窗口后,如何更新视图数据
- 两个多边形,如何求相交面积?
- 通过编程将自己开发的程序添加到“添加/删除程序”问题
- 100分求助,打印曲线,纸张右边老是空一块
- 对话框中的数字编辑框如何重新得到焦点?(在线等)
- 各位大侠,请问这个问题如何解决error LNK2001: unresolved external symbol __imp__WSASocketA@24
- 请大家帮忙详细解释一下!
- ActiveX的Toolbar设置ImageList问题.
- 就要跳槽去一家软件公司,面试应注意什么(VC++,MFC)
- 如何实现以下功能:禁止用户访问某个文件?例如*.mdb,不用加密的方法,谢谢!
- 工具栏创建问题
- 新手求助!MFC CString对象赋值问题
特别是仅仅是读取CString内容的时候,用GetBuffer是不专业的,虽然可能运行结果是对的。你这个例子,CString内容可能都还没有分配内存,或者内存不足。
一般比较忌讳把一个类里面的成员取出来,用crt(或者类似的)函数去操作,如果真的有这种需要,那么类一定会提供相应的接口的。