以下错误是@ 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;
}
答案 0 :(得分:4)
这些变量是合适的类型,但它却一直说不出来?
不,他们不是。 LPCWSTR
和LPWSTR
分别是const wchar_t*
和wchar_t*
的别名。您必须使用std::wstring
代替std::string
。
分解他们的意思:
LPCWSTR
:指向Const Wide String的长指针LPWSTR
:指向宽字符串的长指针或者,您可以不将项目编译为unicode(通过将字符集更改为Multi-Byte IIRC),这样Windows API就会期望“常规”字符串。
编辑:我应该注意,就像字符串具有广泛的类比一样,std::cout
和std::cin
形式为std::wcout
和std::wcin
。
答案 1 :(得分:2)
您正在编译Unicode版本,因此所有Windows API函数都需要Unicode字符串。
你可以:
std::wstring
等)GetFullPathNameA
等)答案 2 :(得分:2)
LPCWSTR是const wchar_t *。你最好切换到wchar_t,因为所有的windows API本身都可以使用wchar_t。