• 6017阅读
  • 7回复

C++问题,为什么QT编译的时候提示没有定义方法呢? [复制链接]

上一主题 下一主题
离线lugaideath
 

只看楼主 正序阅读 楼主  发表于: 2009-11-26
代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QProcess>

Widget::Widget(QWidget *parent)
    : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(slotGet()));
}

void Widget::slotGet()
{
    ui->listWidget->clear();
    this->processID.clear();

    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("CreateToolhelp32Snapshot 调用失败");
        return;
    }
    bool bMore = ::Process32First(hProcessSnap,&pe32);
    while(bMore)
    {
        ui->listWidget->addItem(QString::fromWCharArray(pe32.szExeFile));
        this->processID << pe32.th32ProcessID;
        qDebug() <<  GetProcessPath(pe32.th32ProcessID);
        bMore = ::Process32Next(hProcessSnap,&pe32);
    }

    ::CloseHandle(hProcessSnap);
}

QString Widget::GetProcessPath( DWORD idProcess )
{
    // 获取进程路径
    WCHAR name[1024];
    ZeroMemory(name,1024);
    // 打开进程句柄
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, idProcess );
    if( NULL != hProcess )
    {
        DWORD cbNeeded;
        HMODULE hMod;
        // 获取路径
        if(::EnumProcessModules(hProcess,&hMod,sizeof(hMod),&cbNeeded))
            DWORD dw = ::GetModuleFileNameExW(hProcess, hMod, name, 1024 );

        CloseHandle( hProcess );
        }
    return QString::fromWCharArray(name);
}

Widget::~Widget()
{
    delete ui;
}


包含了应有的头文件了
#include <windows.h>
#include <tlhelp32.h>
#include <psapi.h>


QT编辑器在编写的过程中,方法EnumProcessModules和GetModuleFileNameExW都有提示的,但编译的时候却提示我没有定义这两个方法,是什么原因呢?
离线lugaideath

只看该作者 7楼 发表于: 2009-11-27
不行,结果还是一样的
离线yb824
只看该作者 6楼 发表于: 2009-11-27
这样呢
LIBS += -LD:\Qt\2009.03\mingw\lib -lpsapi
[ 此帖被yb824在2009-11-27 10:30重新编辑 ]
离线lugaideath

只看该作者 5楼 发表于: 2009-11-27
紧急求救
离线lugaideath

只看该作者 4楼 发表于: 2009-11-26
例子也是同样的情况,
Psapi.dll在system32里面
离线foxyz

只看该作者 3楼 发表于: 2009-11-26
http://msdn.microsoft.com/en-us/library/ms682621(VS.85).aspx这个例子可以看看.

你的Psapi.dll放在哪里的?注册到注册表了吗?
离线lugaideath

只看该作者 2楼 发表于: 2009-11-26
INCLUDEPATH += D:\Qt\2009.03\mingw\include
LIBS += -LD:\Qt\2009.03\mingw\lib -lD:\Qt\2009.03\mingw\lib\libpsapi.a

但编译的时候还是提示
undefined reference to EnumProcessModules@16
undefined reference to GetModuleFileNameExW@16
离线yb824
只看该作者 1楼 发表于: 2009-11-26
try to add "LIBS += -lpsapi" to  .pro file
快速回复
限100 字节
 
上一个 下一个