首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不相容var类型

不相容var类型
EN

Stack Overflow用户
提问于 2013-08-04 03:24:16
回答 3查看 6.5K关注 0票数 1

下面的错误是@ GetFullPathName()函数

代码语言:javascript
复制
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"

当我试图运行我的程序时,我一直收到上面的错误。变量的类型是适当的,但它总是说不是吗?对此有什么想法吗?我不认为有必要把它们打出来。

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-04 03:29:38

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

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

他们的意思是:

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

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

编辑:我应该注意到,就像字符串有广泛的模拟一样,std::coutstd::cin也是以std::wcoutstd::wcin的形式出现的。

票数 4
EN

Stack Overflow用户

发布于 2013-08-04 03:30:10

您正在编译Unicode构建,所以所有Windows函数都需要Unicode字符串。

你可以:

  • 更改项目设置以执行多字节生成。
  • 切换到使用宽字符串(std::wstring等)
  • 显式调用ANSI函数(GetFullPathNameA等)
票数 2
EN

Stack Overflow用户

发布于 2013-08-04 03:32:16

LPCWSTR是const wchar_t*。切换到wchar_t也更好,因为所有的windows本机都可以使用wchar_t。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18039436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档