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: const ワイド文字列への long ポインタ
  • LPWSTR: ワイド文字列へのロング ポインタ

または、プロジェクトを Unicode としてコンパイルできませんでした (文字セットをマルチバイト IIRC に変更することにより)。そうすれば、Windows API は「通常の」文字列を期待します。

std::cout編集:文字列が広い類似物を持っているのと同じように、 andstd::cinの形でstd::wcoutandを行うことに注意してくださいstd::wcin

于 2013-08-04T03:29:38.070 に答える
2

すべての Windows API 関数が Unicode 文字列を予期するように、Unicode ビルドをコンパイルしています。

次のいずれかを実行できます。

  • マルチバイト ビルドを行うようにプロジェクト設定を変更します。
  • ワイド文字列の使用に切り替える (std::wstringなど)
  • ANSI api 関数を明示的に呼び出す (GetFullPathNameAなど)
于 2013-08-04T03:30:10.013 に答える
2

LPCWSTR は const wchar_t* です。すべての Windows API は wchar_t でネイティブに動作するため、wchar_t に切り替えることもお勧めします。

于 2013-08-04T03:32:16.637 に答える