正确使用头文件

时间:2019-05-17 11:30:06

标签: c++

我正在尝试扩展我的C ++游戏黑客技能,就像我刚开始时(两年前)那样,我做出了一个错误的决定:继续通过vb.net进行游戏黑客,而不是学习c ++(因为我有一些vb.net知识和其他语言的0知识)

因此,现在作为第一步,我必须创建自己的工具包,在这里我将使用自己的模板:

  • Nathalib.h(我的模板,具有用于游戏黑客的所有常用功能)。
#pragma once
#include <iostream>
#include <Windows.h>
#include <string>

#include <TlHelp32.h>
#include <stdio.h>

using namespace std;

DWORD ProcessID;

int FindProcessByName(string name)
{
    HWND hwnd = FindWindowA(0, name);
    GetWindowThreadProcessId(hwnd, &ProcessID);

    if (hwnd)
    {
        return ProcessID;
    }
    else
    {
        return 0;
    }
}
  • Hack.cpp(显然,作弊方式在每个游戏中都会有所不同)。
#pragma once
#include "pch.h"
#include <iostream>
#include <Windows.h>
#include <string>
#include <Nathalib.h>
using namespace std;

int main()
{
  While(True)
  {    
    cout << FindProcessByName("Calculator") << endl;
    getchar();
    cout << "-----------------------------------" << endl << endl;
  }
  return 0;
}
  • Target.cpp(由于我们不是坏孩子,我必须提供自己的目标)。
#include "pch.h"
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
#define CHAR_ARRAY_SIZE 128

int main()
{
    int varInt = 123456;
    string varString = "DefaultString";
    char arrChar[CHAR_ARRAY_SIZE] = "Long char array right there ->";
    int * ptr2int;
    ptr2int = &varInt;
    int ** ptr2ptr;
    ptr2ptr = &ptr2int;
    int *** ptr2ptr2;
    ptr2ptr2 = &ptr2ptr;

    while(True) {
        cout << "Process ID: " << GetCurrentProcessId() << endl;

        cout << "varInt (0x" << &varInt << ") = " << varInt << endl;
        cout << "varString (0x" << &varString << ") = " << varString << endl;
        cout << "varChar (0x" << &arrChar << ") = " << arrChar << endl;

        cout << "ptr2int (0x" << hex << &ptr2int << ") = " << ptr2int << endl;
        cout << "ptr2ptr (0x" << hex << &ptr2ptr << ") = " << ptr2ptr << endl;
        cout << "ptr2ptr2 (0x" << hex << &ptr2ptr2 << ") = " << ptr2ptr2 << endl;

        cout << "Press ENTER to print again." << endl;
        getchar();
        cout << "-----------------------------------" << endl << endl;
    }

    return 0;
}

我不知道为什么无法识别头文件。

  1. 这是包含头文件的正确方法吗?我应该创建一个命名空间/类/对象来调用它吗?
  2. 这是创建头文件的正确方法吗?或者我应该为此目的创建另一种项目/资源?
  3. 我应该如何调用我的库方法?像LibraryName.MethodName吗?

我只是来自其他语言,有些想法/功能在其他语言中不可用(这就是为什么我对这种语言感兴趣)

如果我忘了添加一些内容,请告诉我,我会更新

谢谢

4 个答案:

答案 0 :(得分:4)

有多个错误-请检查您的教科书。

  1. 您在#include ""中包含自己的标题。系统标头包含在#include<>
  2. 头文件通常包含函数声明。功能主体进入相应的.cpp文件。
  3. 您可以通过库名称来调用它们。如果它们在名称空间中,则可能意味着格式为namespacename::functionname(arguments)

答案 1 :(得分:0)

有两种使用标头的方式,使用""<>

  • 使用<>将在系统搜索路径(不是$PATH variabel中搜索文件,而是`-I'附带的路径列表以及编译器已经知道的标准头文件) ),如果发现则包含在内
  • 使用""可以在当前文件夹和系统搜索路径中搜索文件

假设标题位于hack.cpp的这些文件夹中,则应使用

#include "Nathalib.h"

答案 2 :(得分:0)

首先,您的标头缺少包含防护的功能,#pragma once仅适用于msvc ++。 您的头文件可能不在PATH中,因此您需要指定它相对于项目的路径。如果您的头文件与cpp文件位于同一根目录中,那么您所需要做的就是将该头文件的include语句更改为#include "Nathalib.h",否则您必须指定相对路径。

答案 3 :(得分:0)

要添加到其他请求者中,为什么要在.h文件中放置函数声明,而在.cpp文件中定义函数:Writing function definition in header files in C++

我建议找到一些c ++教程,例如:http://www.tutorialspoint.com/cplusplus/cpp_functions.htm 您应该首先学习教程,对简单的代码进行一些练习。我个人更喜欢检查,然后最简单地为新的编程结构编写代码。然后更加复杂。 进行此类学习后,您还可以参考:http://www.cplusplus.comhttps://en.cppreference.com/w/