TCHAR** 函数调用

Demogodyou 2009-07-23 09:57:20
函数声明如下:
int GetProcessName(OUT DWORD* pID, OUT TCHAR** pName, DWORD dwSize)

能不能写一个调用并显示 pName 内容的例子? 多谢!
...全文
147 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
greatws 2009-07-23
  • 打赏
  • 举报
回复
我觉得可能是调用一次,取一条新的数据。
jingzhongrong 2009-07-23
  • 打赏
  • 举报
回复
int result = 0;
DWORD pId = 0;
TCHAR pName[256];
result = GetProcessName(&pId, &pName, 256) ;
KeSummer 2009-07-23
  • 打赏
  • 举报
回复
按照你的说法,pName也应该是字符串数组。
给你个测试的例子
TCHAR * p[10];
for(int i=0;i<10;i++)
p[i] = new TCHAR[256];
DWORD dwID[10];
int nRet = GetProcessName(&dwID,p,10);

for(i=0;i<10;i++)
_tprintf(p[i]);

//释放内存。
Demogodyou 2009-07-23
  • 打赏
  • 举报
回复
多谢 KeSummer 的回复,不过调用还是有点问题,下面是这个函数的注释:

功能 : 返回模块提供的图像处理功能信息
参数 : pID - DWORD 数组, 用于存放图像处理ID
pName - 字符串数据,用于存放图像处理名字
dwSize - 输入数组的大小
返回 : 图像处理功能总数

看样子 pID 是DWORD数组,pName 也是要在外面初始化的。对c++不熟,麻烦再解答一下。
xy_dream 2009-07-23
  • 打赏
  • 举报
回复
不知道楼主想干什么,显示pname内容很简单呀,定义一个
TCHAT aa[256]={0};
DWORD bb;
DWORD dwsize
GetProcessName(&bb, &aa, dwsize) ;
MessageBox(NULL,aa,NULL,NULL);
这样就可以显示呀,不知道你函数内部是什么东西
paerxiushi 2009-07-23
  • 打赏
  • 举报
回复
调用时:
DWORD dwID=2046;
TCHAR* szName=new TCHAR[100];
GetProcessName(dwID,&szName,100);
delete[] szName;
函数体中会出现这么几句:
TCHAR szProcessName[1024]; //进程名称
//得到进程名称
if(_tcslen(szProcessName)>=dwSize) //当进程名称长度超过了缓冲区长度
{
delete[] *pName;
*pName=new TCHAR[_tcslen(szProcessName)+1];
}
_tcscpy(*pName,szProcessName);
paerxiushi 2009-07-23
  • 打赏
  • 举报
回复
个人觉得,第一个参数是输入参数,而第二个参数指向的地址,也就是说指向的字符串地址可能被修改,第三个参数指定的是字符串的长度。
int GetProcessName(DWORD dwID, OUT TCHAR** pName, DWORD dwSize)
调用时:
DWORD dwID=2046;
TCHAR* szName=new TCHAR[100];
GetProcessName(2046,&szName,_tcslen(szName));
delete[] szName;
函数体中会出现这么几句:
TCHAR szProcessName[1024]; //进程名称
//得到进程名称
if(_tcslen(szProcessName)>=dwSize)
{
delete[] *pName;
*pName=new TCHAR[_tcslen(szProcessName)+1];
}
_tcscpy(*pName,szProcessName);
KeSummer 2009-07-23
  • 打赏
  • 举报
回复
还有另外一种可能,那就是获取特定进程的信息,不同的方法,打印是不一样的,所以我在1L是白写了。
KeSummer 2009-07-23
  • 打赏
  • 举报
回复
从参数来看,应该在GetProcessName申请内存,调用的话:
TCHAR * pName = NULL;
DWORD dwPID = 1000;
GetProcessName(&dwPID,&pName,1000);

不过个人觉得这个函数有问题,从名字看是获得进程的名字,但是应该是传入进程的ID,第一个参数是OUT?

如果是获取全部进程的话,最后一个参数有何用?而且函数名字也误导别人。
KeSummer 2009-07-23
  • 打赏
  • 举报
回复
窗口程序:MessageBox(NULL,pName,pName,0);
或者
控制台程序:_tprintf(pName);
Demogodyou 2009-07-23
  • 打赏
  • 举报
回复
问题已搞定,感谢大家,主要感谢 KeSummer 的大力帮助。结帖,人人有分。

整理后的代码如下:

const int length = 25;
TCHAR * processNames[length];
for(int i=0;i < length;i++)
processNames[i] = new TCHAR[256];
DWORD processIDs[length];
int nRet = g_pIXRayImgShow->GetProcessName(processIDs, processNames, length);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧