不兼容的var类型

时间:2013-08-04 03:24:17

标签: c++ winapi

以下错误是@ 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;
}

3 个答案:

答案 0 :(得分:4)

  

这些变量是合适的类型,但它却一直说不出来?

不,他们不是。 LPCWSTRLPWSTR分别是const wchar_t*wchar_t*的别名。您必须使用std::wstring代替std::string

分解他们的意思:

  • LPCWSTR:指向Const Wide String的长指针
  • LPWSTR:指向宽字符串的长指针

或者,您可以将项目编译为unicode(通过将字符集更改为Multi-Byte IIRC),这样Windows API就会期望“常规”字符串。

编辑:我应该注意,就像字符串具有广泛的类比一样,std::coutstd::cin形式为std::wcoutstd::wcin

答案 1 :(得分:2)

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

你可以:

  • 更改项目设置以执行多字节构建
  • 切换到使用宽字符串(std::wstring等)
  • 明确调用ANSI api函数(GetFullPathNameA等)

答案 2 :(得分:2)

LPCWSTR是const wchar_t *。你最好切换到wchar_t,因为所有的windows API本身都可以使用wchar_t。