小编gui*_*ar-的帖子

C++命名空间和在单独的文件中定义类

我想创建一个名称空间,它将包含几个类作为"包"的一部分.

我是否必须声明命名空间中的所有类?

例如,如果我有一个定义2dEngine命名空间的"2dEngine.h",我是否必须在该头文件中声明所有单独的类?或者我仍然可以将它们分成单独的标题(.h)文件并让它们成为命名空间的一部分?

伪示例:

TwoEngine.h

namespace TwoEngine
{
    class Canvas
    {
        // Define all of Canvas here
    };

    class Primitive
    {
        // Define all of Primitive here
    };
}
Run Code Online (Sandbox Code Playgroud)

而不是这样做,我想让Canvas和Primitive成为他们自己的.h文件,并且只是某种程度上声明它们是该命名空间的一部分.

对不起,我还是很陌生.

c++ namespaces header file

32
推荐指数
2
解决办法
2万
查看次数

C或C++:加载器/包装器如何工作?

这是我的意思的一个例子......

  • 用户运行LOADER.EXE程序
  • LOADER.EXE下载另一个EXE但将其全部保存在内存中而不将其保存到磁盘
  • 运行下载的EXE就像从磁盘执行它一样,但直接从内存执行

我见过这样的一些应用程序,我从来没有见过它的工作原理的例子或解释.

有人知道吗?

另一个例子是在另一个中嵌入加密的EXE.它在内存中被提取和解密,而不会在执行之前保存到磁盘.

我已经看到在某些应用程序中用于防止盗版.

编辑:作为旁注,像UPX这样的程序是这样工作的吗?我查看了代码,但很难为我解读,我主要是出于好奇,我不需要它.

c++ windows loader

8
推荐指数
1
解决办法
1843
查看次数

GetDIBits并使用X,Y循环遍历像素

我抓住屏幕的一部分并扫描像素以获得特定的颜色范围.

我查看了MSDN的Capturing a Image示例,并了解如何使用这些函数.

我可以把这些位放到一个数组中,但是我不知道如何以这样的方式进行操作,我可以像运用图像一样循环它.一个伪示例(我肯定是这样的):

for ( x = 1; x <= Image.Width; x += 3 )
{
    for ( y = 1; y <= Image.Height; y += 3 )
    {
        red = lpPixels[x];
        green = lpPixels[x + 1];
        blue = lpPixels[x + 2];
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上就是我想做的事情,所以如果红色,蓝色和绿色是某种颜色,我会知道图像中(x,y)的坐标是什么.

我只是不知道如何以这种方式使用GetDIBits,以及如何适当地设置数组以便能够实现这一点.

c++ loops pixels getdibits

7
推荐指数
2
解决办法
2万
查看次数

在C中制作支持PHP的准系统,支持PHP的Web服务器?

我想在C中创建支持PHP的可能性最轻的HTTP服务器,如果它会产生巨大的差异,可能会使用FastCGI.

我不确定如何实现PHP支持.它是否只是通过.php文件的路径调用PHP.exe并读取输出?PHP中的header()之类的东西怎么样?那些服务器如何处理?

另一个问题是,为每个请求使用单独的线程是否理想?我不指望负载很重,但我对这个设计方面并不是100%肯定...

我对C和C++还很陌生,这是一次学习经历.

php c webserver fastcgi

6
推荐指数
1
解决办法
1684
查看次数

C - 程序结构(避免全局变量,包括等)

我正在使用C(而不是C++),我不确定如何避免使用全局变量.

我对C,它的语法以及如何编写基本应用程序有相当不错的把握,但我不确定构造程序的正确方法.

真正的大型应用程序如何避免使用全局变量?我很确定总会有至少一些,但对于用C编写的大型游戏和其他应用程序,最好的方法是什么?

是否有任何好的,开源软件严格用C编写,我可以看一下?我无法想到任何问题,其中大多数似乎都是用C++编写的.

谢谢.

编辑

下面是一个示例,我将在一个简单的API挂钩应用程序中使用全局变量,它只是另一个进程中的DLL.

具体而言,此应用程序挂钩了另一个应用程序中使用的API函数.它通过使用WriteProcessMemory覆盖对原始的调用,并使其调用我的DLL来实现.

但是,当取消挂起API函数时,我必须回写原始内存/机器代码.

因此,我需要为该机器代码维护一个简单的字节数组,每个API函数都挂钩一个,并且有很多.

// Global variable to store original assembly code (6 bytes)
BYTE g_MessageBoxA[6];

// Hook the API function
HookAPIFunction ( "user32.dll", "MessageBoxA", MyNewFunction, g_MessageBoxA );

// Later on, unhook the function
UnHookAPIFunction ( "user32.dll", "MessageBoxA", g_MessageBoxA );
Run Code Online (Sandbox Code Playgroud)

对不起,如果那令人困惑.

c program-structure global-variables

6
推荐指数
1
解决办法
1万
查看次数

C2061语法错误(标识符)

1>cb.c(51): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(51): error C2059: syntax error : ';'
1>cb.c(51): error C2059: syntax error : 'type'
1>cb.c(52): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(52): error C2059: syntax error : ';'
1>cb.c(52): error C2059: syntax error : 'type'
1>cb.c(122): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(122): error C2059: syntax error : ';'
1>cb.c(122): error C2059: syntax error : 'type'
1>cb.c(127): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(127): error C2059: syntax error : …
Run Code Online (Sandbox Code Playgroud)

c compiler-errors syntax-error

6
推荐指数
2
解决办法
1万
查看次数

C++:在API函数中使用std :: wstring

我正在使用SHGetSpecialFolderLocation API函数.我的应用程序设置为"使用Unicode字符集".

这是我到目前为止所拥有的:

int main ( int, char ** )
{
    LPITEMIDLIST pidl;
    HRESULT hr = SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl);


    /* Confused at this point */
    wstring wstrPath;

    wstrPath.resize ( _MAX_PATH );
    BOOL f = SHGetPathFromIDList(pidl, wstrPath.c_str () );
    /* End confusion */
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

error C2664: 'SHGetPathFromIDListW' : cannot convert parameter 2 from 'const wchar_t *' to 'LPWSTR'
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?什么是正确的C++方式来做到这一点?

谢谢!

c++ api wstring c2664

3
推荐指数
1
解决办法
3719
查看次数

警告C4172:返回局部变量的地址或临时变量

可能重复:
指向局部变量的指针

我已经在这个网站上阅读了很多关于同样问题的其他主题,因为我知道它很常见.但我想我是愚蠢的,无法弄清楚这样做的正确方法.所以,我为这些问题中的另一个道歉,我希望有人可以给我一个简单的解决方案和/或解释.

这是整个代码:

MAIN.C

#define WIN32_LEAN_AND_MEAN

#include <Windows.h>
#include <stdlib.h>
#include <tchar.h>


LPTSTR GetApplicationPath ( HINSTANCE Instance );


int APIENTRY _tWinMain ( HINSTANCE Instance, HINSTANCE PreviousInstance, LPTSTR CommandLine, int Show )
{
    LPTSTR sMessage = GetApplicationPath ( Instance );

    MessageBox (
        NULL,
        sMessage,
        _T ( "Caption!" ),
        MB_OK
    );

    return 0;
}


LPTSTR GetApplicationPath ( HINSTANCE Instance )
{
    _TCHAR sReturn[MAX_PATH];

    GetModuleFileName ( (HMODULE) Instance, sReturn, MAX_PATH );

    return sReturn;
}
Run Code Online (Sandbox Code Playgroud)

c compiler-warnings

1
推荐指数
1
解决办法
1万
查看次数