-1

みんな、どうしてこれがエラーになったのですか?どうすれば修正できますか?! しかし、その前に、ネットで検索して、プロパティなどの問題の解決策を見つけ、[構成プロパティ] > [全般] に移動すると言います。文字セットを「マルチバイト文字セットを使用」に切り替えます。しかし、私も同じエラーがありますか?!!

エラーの:

Error   7   error C2664: 'MessageBoxA' : cannot convert parameter 2 from 'const wchar_t [58]' to 'LPCSTR'   

Error   8   error C2664: 'int std::basic_string<_Elem,_Traits,_Ax>::compare(const std::basic_string<_Elem,_Traits,_Ax> &) const' : cannot convert parameter 1 from 'CHAR [260]' to 'const std::basic_string<_Elem,_Traits,_Ax> &'   

私のコードは次のとおりです。

#include "StdInc.h"
#include<fstream>
#include<sstream>
#include<string>
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<Windows.h>
#include<TlHelp32.h>

using std::ifstream;
using std::string;
using std::getline;
using std::ios;
using std::cerr;
using std::cout;
using std::endl;
using std::fixed;
using std::left;
using std::right;
using std::showpoint;
using std::cin;

class check {

public :


void check_seta () {

    ifstream cfgm2("finfin.cfg",ios::in);

    string cfgLine;

    while (getline(cfgm2,cfgLine)) {

        if (string::npos != cfgLine.find("seta mamamia")){

             if (cfgLine.at(19) == '0'){

                 MessageBox(NULL , L"lol not do that",NULL,MB_ICONERROR); 

                 std::wstring Processname(L"mod.exe");

                 DWORD ProcessId = FindProcessId(Processname);

                 HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, TRUE ,ProcessId);

                 TerminateProcess(pHandle,0);

                 CloseHandle(pHandle);
             }
             break;
        }

    }
}

DWORD FindProcessId(const std::wstring& processName)
    {
    PROCESSENTRY32 processInfo;
    processInfo.dwSize = sizeof(processInfo);

    HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if ( processesSnapshot == INVALID_HANDLE_VALUE )
    return 0;

    Process32First(processesSnapshot, &processInfo);
    if ( !processName.compare(processInfo.szExeFile) )
    {
        CloseHandle(processesSnapshot);
        return processInfo.th32ProcessID;
    }

    while ( Process32Next(processesSnapshot, &processInfo) )
    {
        if ( !processName.compare(processInfo.szExeFile) )
        {
            CloseHandle(processesSnapshot);
            return processInfo.th32ProcessID;
        }
    }

    CloseHandle(processesSnapshot);
    return 0;
}
};
4

3 に答える 3

4

プロジェクト設定で、Unicode を選択しませんでした。したがって、WIN32 API の狭い文字バージョンが得られます。MessageBox は MessageBoxA にマップされ、プロセス情報構造体には LPCSTR が含まれています。設定を変更すると、これらは MessageBoxW および LPCWSTR になり、コードがコンパイルされます (または他の場所で他のエラーが発生します)。

A バージョンを使用する場合は、wchar_t の代わりに char、wstring の代わりに string、L"xxxx" の代わりに "xxx" を使用してください。

于 2013-05-31T17:54:00.057 に答える
1

ワイド文字列リテラル ( ) を使用しているため、言及したプロジェクト設定で実際にUnicodeL"..."文字セットを使用する必要があります。これにより、すべての Windows 関数名マクロが定義され、ワイド文字バリアント (接尾辞) に展開されます。_UNICODEW

または、ワイド文字列を使用したいことがわかっている場合は、ワイド文字バージョンを直接呼び出してください。つまり、他の文字幅固有の関数には、などのMessageBoxW代わりに使用します。MessageBox

于 2013-05-31T17:47:23.387 に答える
0

Visual Studio のプロジェクト プロパティで、[構成設定] > [C/C++] > [プリプロセッサ] > [プリプロセッサの定義] に移動し、UNICODE を確認します。が定義されています。それは私にとって同様のエラーを修正しました。

于 2013-06-19T14:27:37.113 に答える