1

以下错误是@GetFullPathName() 函数

1   IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
2   IntelliSense: argument of type "char *" is incompatible with parameter of type "LPWSTR"

当我尝试运行我的程序时,我不断收到上述错误。变量是适当的类型,但它一直说不是吗?关于为什么会这样的任何想法?我认为没有必要对它们进行类型转换。

#include "stdafx.h"

using namespace std;

int main(int argc, _TCHAR* argv[])
{
    /* Get path of DLL we're loading */
    string name;
    cin >> name;

    const char* DLL_NAME = name.c_str();

    HWND handle = FindWindow(0, L"Calculator");

    if(handle == NULL){
        cout << "Couldn't find process window!" << endl;
    }else{
        cout << "Process window found, continuing..." << endl;

        DWORD id;
        GetWindowThreadProcessId(handle, &id);

        char DLL_LOCATION[MAX_PATH] = {0};
        GetFullPathName(DLL_NAME, MAX_PATH, DLL_LOCATION, NULL);

    }

    return 0;
}
4

3 回答 3

4

变量是适当的类型,但它一直说不是吗?

不,他们不是。LPCWSTR和分别是和LPWSTR的别名。你必须使用而不是这个。const wchar_t*wchar_t*std::wstringstd::string

分解它们的含义:

  • LPCWSTR: 指向常量宽字符串的长指针
  • LPWSTR: 指向宽字符串的长指针

或者,您不能将项目编译为 unicode(通过将字符集更改为多字节 IIRC),这样 Windows API 将期望“常规”字符串。

编辑:我应该注意,就像字符串具有广泛的类似物一样std::cout,并且以andstd::cin的形式存在。std::wcoutstd::wcin

于 2013-08-04T03:29:38.070 回答
2

您正在编译 Unicode 版本,因此所有 Windows API 函数都需要 Unicode 字符串。

您可以:

  • 更改您的项目设置以进行多字节构建
  • 切换到使用宽字符串(std::wstring等)
  • 显式调用 ANSI api 函数(GetFullPathNameA等)
于 2013-08-04T03:30:10.013 回答
2

LPCWSTR 是 const wchar_t*。您最好也切换到 wchar_t,因为所有 Windows API 都可以原生使用 wchar_t。

于 2013-08-04T03:32:16.637 回答