1

コード:

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <iomanip>
#include <locale>
#include <sstream>
#include <string>
int main()
{
    HWND handle = FindWindow(0 ,TEXT("window name"));
    if(handle == 0)
    {
             MessageBox(0,TEXT("Failed to find window"),TEXT("Return"),MB_OK);
    }
    else
    {
    DWORD ID;
    GetWindowThreadProcessId(handle,&ID);
    HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION , FALSE, ID);
    hProcess = OpenProcess(PROCESS_VM_READ , FALSE, ID);

    if(!hProcess)
    {
        Beep(1000,1000);
    }else {

          int buffer;
        if (ReadProcessMemory(hProcess,(void *)0x00963FC4,&buffer,4,NULL))  
        {
             printf(buffer);
        }
        else  {
            MessageBox(0,TEXT("Could not Read"),TEXT("Return"),MB_OK);
              }

        }CloseHandle(hProcess);
    }

}


メモリ アドレスを読み取るこのプログラムを作成しようとしましたが、次の
エラーが発生しました:
IntelliSense: 型 "int" の引数は、型 "const char のパラメーターと互換性がありません *
私は printf(buffer) を試しました;
文字列を作成しようとしましたが、そうでもありません動作しません。

文字列テスト;

4

1 に答える 1

1

まず、正しい printf() 呼び出しをフォーマット文字列で使用してみてください。

printf("%d", buffer);

C は静的に型付けされた言語であり、printf() を使用して Python のようなものを実行して、必要なものを出力することはできません。printf() 関数は常に最初の "const char *" 引数のみを出力し、規則に従ってこの文字列の一部の値を置き換えることができます。

次に、コードに TEXT() マクロが含まれているので、プロジェクトの設定で Unicode 文字列を使用している可能性があります。その場合 (VC++ でリンク エラー 2019/2005 が発生するはずです)、wprintf() 関数を使用する必要があります。

wprintf(L"%d", buffer);

std::string オブジェクトを出力するには、それを「const char*」に変換する必要もあります。これは、string::c_str() 呼び出しによって行われます。

std::string MyString("Test");
printf("Your string is = %s", MyString.c_str());
于 2012-05-21T05:55:50.210 に答える